home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 09 - 1993 / 09.02 Feb 93 / Jörg's Folder / Mach2 2.14 Seg.11.new.4th < prev    next >
Encoding:
Text File  |  1992-09-02  |  56.1 KB  |  2,716 lines  |  [TEXT/NISI]

  1. ONLY MAC
  2. ALSO ASSEMBLER
  3. ALSO FORTH DEFINITIONS
  4.  
  5. HEADER new.CODE11.start
  6.  
  7. CODE    an.RTS                \ $005647FC
  8.     RTS
  9. END-CODE
  10.  
  11. CODE my.FILEID                \ $005647FE
  12.     LEA        $3C(A4),A0        \ Ref: FILEID
  13.     MOVE.L    A0,-(A6)
  14.     RTS
  15. END-CODE
  16.  
  17. CODE my.WDRefNum            \ $00564806
  18.     LEA        $3E(A4),A0
  19.     MOVE.L    A0,-(A6)
  20.     RTS
  21. END-CODE
  22.  
  23. CODE my.CONTEXT                \ $0056480E
  24.     LEA        $40(A4),A0        \ Ref: CONTEXT
  25.     MOVE.L    A0,-(A6)
  26.     RTS
  27. END-CODE
  28.  
  29. CODE my.TWPtr                \ $00564816
  30.     LEA        $48(A4),A0        \ Ref: TaskWindowPointer
  31.     MOVE.L    A0,-(A6)
  32.     RTS
  33. END-CODE
  34.  
  35. CODE VP_$28                    \ $0056481E
  36.     LEA        $-55A(A5),A0    \ Ref: VP
  37.     MOVEQ.L    #$28,D0
  38.     ADD.L    D0,A0
  39.     MOVE.L    A0,-(A6)
  40.     RTS
  41. END-CODE
  42.  
  43. CODE CR.ABORT                \ $0056482A
  44.     JSR        $3C2(A5)        \ CR
  45.     JSR        $26A(A5)        \ ABORT
  46.     RTS
  47. END-CODE
  48.  
  49. CODE word1                    \ $00564834
  50.     MOVE.L    (A6)+,D1
  51.     MOVEQ.L    #$9,D0            \ $9
  52.     CMP.L    D0,D1
  53.     BLE.S    @a                \ +$A $564850
  54.  
  55.     ADDQ.L    #$7,D1
  56.  
  57. @a                            \ $00564850
  58.     MOVEQ.L    #$30,D0
  59.     ADD.L    D0,D1
  60.     MOVE.L    D1,-(A6)
  61.     RTS
  62. END-CODE
  63.  
  64. CODE (ASCII)                \ $0056485C
  65.     LINK    A2,#$-8
  66.     MOVEQ.L    #$20,D0            \ $20
  67.     MOVE.L    D0,-(A6)
  68.     JSR        $6CA(A5)        \ WORD
  69.     JSR        $5C2(A5)        \ COUNT
  70.     MOVEQ.L    #$4,D0            \ $4
  71.     MOVE.L    D0,-(A6)
  72.     JSR        $342(A5)        \ MIN
  73.     MOVE.L    (A6)+,$-8(A2)
  74.     MOVE.L    (A6)+,$-4(A2)
  75.     MOVEA.L    $-4(A2),A0
  76.     MOVEQ.L    #$0,D0
  77.     MOVE.B    (A0),D0
  78.     MOVE.L    D0,-(A6)
  79.     MOVEQ.L    #$0,D0
  80.     TST.L    $-8(A2)
  81.     BLE.S    @a                \ +$4 $564892
  82.  
  83.     MOVEQ.L    #$-1,D0
  84.  
  85. @a                            \ 00564892
  86.     AND.L    (A6)+,D0
  87.     BEQ.S    @b                \ +$4E $5648E4
  88.  
  89.     MOVEQ.L    #$0,D0            \ $0
  90.     MOVE.L    D0,-(A6)
  91.     MOVE.L    $-4(A2),-(A6)
  92.     MOVE.L    $-8(A2),D0
  93.     ADD.L    D0,(A6)
  94.     MOVE.L    $-4(A2),-(A6)
  95.     MOVE.L    D5,(A3)+        \ DO
  96.     MOVE.L    D6,(A3)+
  97.     MOVE.L    (A6)+,D6
  98.     MOVE.L    (A6)+,D5
  99.  
  100. @c                            \ 005648B4
  101.     MOVEQ.L    #$8,D0            \ $8
  102.     MOVE.L    D0,-(A6)
  103.     JSR        $49A(A5)        \ SHIFT
  104.     MOVEA.L    D6,A0
  105.     MOVEQ.L    #$0,D0
  106.     MOVE.B    (A0),D0
  107.     OR.L    D0,(A6)
  108.     ADDQ.L    #$1,D6
  109.     CMP.L    D6,D5
  110.     BGT.S    @c                \ +$-14    $5648B4
  111.  
  112.     MOVE.L    -(A3),D6
  113.     MOVE.L    -(A3),D5
  114.     TST.L    $-58E(A5)        \ Ref: STATE
  115.     BEQ.S    @d                \ +$8 $5648E0
  116.  
  117.     JSR        $D1A(A5)        \ LITERAL
  118.  
  119. @d                            \ 005648E0
  120.     BRA.S    @e                \ +$28 $564908
  121.  
  122. @b                            \ 005648E4
  123.     BSR.S    @f                \ +$1A
  124.     DC.B    $16
  125.     DC.B    'Illegal ASCII argument'
  126. .ALIGN
  127.  
  128. @f                            \ 005648FE
  129.     MOVE.L    (A7)+,-(A6)
  130.     JSR        $EA(A5)            \
  131.     JSR        CR.ABORT        \ $-DC(PC) $56482A
  132.  
  133. @e                            \ 00564908
  134.     UNLK    A2
  135.     RTS
  136. END-CODE
  137.  
  138. CODE word2                    \ $0056490C
  139.     LINK    A2,#$-10
  140.     MOVE.L    (A6)+,$-8(A2)
  141.     MOVE.L    (A6)+,$-4(A2)
  142.     MOVEQ.L    #$0,D0
  143.     MOVE.L    D0,$-10(A2)
  144.     MOVE.L    $-4(A2),-(A6)
  145.     MOVEQ.L    #$54,D0            \ $54
  146.     MOVE.L    D0,-(A6)
  147.     MOVEQ.L    #$20,D0            \ $20
  148.     MOVE.L    D0,-(A6)
  149.     JSR        $46A(A5)        \ FILL
  150.     JSR        $3C2(A5)        \ CR
  151.     MOVEQ.L    #$B,D0
  152.     MOVE.L    D0,$-10(A2)
  153.     MOVE.L    $-8(A2),D1
  154.     MOVEQ.L    #$E,D0
  155.     AND.L    D0,D1
  156.     MOVE.L    D1,$-C(A2)
  157.     MOVEQ.L    #$10,D0            \ $10
  158.     MOVE.L    D0,-(A6)
  159.     MOVEQ.L    #$0,D0            \ $0
  160.     MOVE.L    D0,-(A6)
  161.     MOVE.L    D5,(A3)+        \ DO
  162.     MOVE.L    D6,(A3)+
  163.     MOVE.L    (A6)+,D6
  164.     MOVE.L    (A6)+,D5
  165.  
  166. @b                            \ 00564954
  167.     MOVE.L    $-C(A2),-(A6)
  168.     MOVE.L    D6,D0
  169.     ADD.L    D0,(A6)
  170.     MOVEQ.L    #$F,D0
  171.     AND.L    D0,(A6)
  172.     JSR        word1            \ $-12E(PC) $564834
  173.     MOVE.L    $-4(A2),A0
  174.     MOVE.L    $-10(A2),D0
  175.     ADD.L    D0,A0
  176.     MOVE.L    (A6)+,D0        \ C!
  177.     MOVE.B    D0,(A0)
  178.     MOVEQ.L    #$2,D0
  179.     ADD.L    D0,$-10(A2)
  180.     MOVE.L    $-C(A2),-(A6)
  181.     MOVE.L    D6,-(A6)        \ I
  182.     ADDQ.L    #$1,(A6)        \ 1+
  183.     MOVE.L    (A6)+,D0        \ +
  184.     ADD.L    D0,(A6)
  185.     MOVEQ.L    #$F,D0
  186.     AND.L    D0,(A6)
  187.     JSR        word1            \ $-158(PC)    $564834
  188.     MOVE.L    $-4(A2),A0
  189.     MOVE.L    $-10(A2),D0
  190.     ADD.L    D0,A0
  191.     MOVE.L    (A6)+,D0        \ C!
  192.     MOVE.B    D0,(A0)
  193.     MOVEQ.L    #$4,D0
  194.     ADD.L    D0,$-10(A2)
  195.     MOVEQ.L    #$2,D0
  196.     MOVE.L    D0,D0
  197.     BLT.S    @a                \ +$C $5649B4
  198.  
  199.     ADD.L    D0,D6
  200.     CMP.L    D5,D6
  201.     BLT.S    @b                \ +$-5A    $564954
  202.  
  203.     BRA.S    @c                \ +$A $5649BC
  204.  
  205. @a                            \ 005649B4
  206.     ADD.L    D0,D6
  207.     CMP.L    D6,D5
  208.     BLE.S    @b                \ +$-64 $564954
  209.  
  210. @c                            \ 005649BC
  211.     MOVE.L    -(A3),D6
  212.     MOVE.L    -(A3),D5
  213.     MOVEQ.L    #$10,D0            \ $10
  214.     MOVE.L    D0,-(A6)
  215.     MOVEQ.L    #$0,D0            \ $0
  216.     MOVE.L    D0,-(A6)
  217.     MOVE.L    D5,(A3)+        \ DO
  218.     MOVE.L    D6,(A3)+
  219.     MOVE.L    (A6)+,D6
  220.     MOVE.L    (A6)+,D5
  221.  
  222. @d                            \ 005649D0
  223.     MOVE.L    $-C(A2),-(A6)
  224.     MOVE.L    D6,D0
  225.     ADD.L    D0,(A6)
  226.     MOVEQ.L    #$F,D0
  227.     AND.L    D0,(A6)
  228.     JSR        word1            \ $-1AA(PC) $564834
  229.     MOVE.L    $-4(A2),A0
  230.     MOVE.L    $-10(A2),D0
  231.     ADD.L    D0,A0            \ C!
  232.     MOVE.L    (A6)+,D0
  233.     MOVE.B    D0,(A0)
  234.     MOVEQ.L    #$1,D0
  235.     ADD.L    D0,$-10(A2)
  236.     ADDQ.L    #$1,D6
  237.     CMP.L    D6,D5
  238.     BGT.S    @d                \ +$-2A $5649D0
  239.  
  240.     MOVE.L    -(A3),D6
  241.     MOVE.L    -(A3),D5
  242.     MOVE.L    $-4(A2),-(A6)
  243.     MOVE.L    $-10(A2),-(A6)
  244.     JSR        $15A(A5)        \ TYPE
  245.     UNLK    A2
  246.     RTS
  247. END-CODE
  248.  
  249. CODE (DUMP)                    \ $00564A12
  250.     LINK    A2,#$-64
  251.     MOVE.L    (A6)+,$-8(A2)
  252.     MOVE.L    (A6)+,$-4(A2)
  253.     LEA        $24(A4),A0        \ Ref: BASE
  254.     MOVE.L    (A0),$-C(A2)
  255.     JSR        $502(A5)        \ HEX
  256.     LEA        $-64(A2),A0
  257.     MOVE.L    A0,-(A6)
  258.     MOVE.L    $-4(A2),-(A6)
  259.     JSR        word2            \ $-12A(PC) $56490C
  260.     MOVE.L    $-4(A2),D1        \ make the address even
  261.     MOVEQ.L    #$-2,D0
  262.     AND.L    D0,D1
  263.     MOVE.L    D1,$-4(A2)
  264.     MOVE.L    $-8(A2),D0        \ put byte count in d0
  265.     ADD.L    D0,D1            \ d1 holds ending addr
  266.     MOVE.L    D1,-(A6)        \ end addr
  267.     MOVE.L    $-4(A2),-(A6)    \ start addr
  268.     MOVE.L    D5,(A3)+        \ DO
  269.     MOVE.L    D6,(A3)+
  270.     MOVE.L    (A6)+,D6
  271.     MOVE.L    (A6)+,D5
  272.  
  273. @n                            \ 00564A5A
  274.     JSR        $3C2(A5)        \ CR
  275.     MOVE.L    $-4(A2),-(A6)    \ start addr
  276.     JSR        $10A(A5)        \ <#
  277.     MOVEQ.L    #$20,D0            \ $20
  278.     MOVE.L    D0,-(A6)
  279.     JSR        $58A(A5)        \ HOLD
  280.     MOVEQ.L    #$20,D0            \ $20
  281.     MOVE.L    D0,-(A6)
  282.     JSR        $58A(A5)        \ HOLD
  283.     MOVEQ.L    #$3A,D0            \ $3A
  284.     MOVE.L    D0,-(A6)
  285.     JSR        $58A(A5)        \ HOLD
  286.     JSR        $45A(A5)        \ #
  287.     JSR        $45A(A5)        \ #
  288.     JSR        $45A(A5)        \ #
  289.     JSR        $45A(A5)        \ #
  290.     JSR        $45A(A5)        \ #
  291.     JSR        $45A(A5)        \ #
  292.     JSR        $45A(A5)        \ #
  293.     JSR        $45A(A5)        \ #
  294.     JSR        $57A(A5)        \ #>
  295.     JSR        $15A(A5)        \ TYPE
  296.     MOVEQ.L    #$10,D0            \ $10
  297.     MOVE.L    D0,-(A6)
  298.     MOVEQ.L    #$0,D0            \ $0
  299.     MOVE.L    D0,-(A6)
  300.     MOVE.L    D5,(A3)+        \ DO
  301.     MOVE.L    D6,(A3)+
  302.     MOVE.L    (A6)+,D6
  303.     MOVE.L    (A6)+,D5
  304.  
  305. @b                            \ 
  306.     MOVE.L    $-4(A2),A0        \ start addr
  307.     MOVEQ.L    #$0,D0
  308.     MOVE.W    (A0,D6.L),D0    \ get first word
  309.     MOVE.L    D0,-(A6)
  310.     JSR        $10A(A5)        \ <#
  311.     MOVEQ.L    #$20,D0            \ $20
  312.     MOVE.L    D0,-(A6)
  313.     JSR        $58A(A5)        \ HOLD
  314.     MOVEQ.L    #$20,D0            \ $20
  315.     MOVE.L    D0,-(A6)
  316.     JSR        $58A(A5)        \ HOLD
  317.     JSR        $45A(A5)        \ #
  318.     JSR        $45A(A5)        \ #
  319.     JSR        $45A(A5)        \ #
  320.     JSR        $45A(A5)        \ #
  321.     JSR        $57A(A5)        \ #>
  322.     JSR        $15A(A5)        \ TYPE
  323.     MOVEQ.L    #$2,D0
  324.     ADD.L    D0,D6
  325.     CMP.L    D6,D5
  326.     BGT.S    @b                \ 
  327.  
  328. @c                            \ $00564B0A
  329.     MOVE.L    -(A3),D6
  330.     MOVE.L    -(A3),D5
  331.     MOVEQ.L    #$10,D0            \ $10
  332.     MOVE.L    D0,-(A6)
  333.     MOVEQ.L    #$0,D0            \ $0
  334.     MOVE.L    D0,-(A6)
  335.     MOVE.L    D5,(A3)+        \ DO
  336.     MOVE.L    D6,(A3)+
  337.     MOVE.L    (A6)+,D6
  338.     MOVE.L    (A6)+,D5
  339.  
  340. @h                            \ $00564B1E
  341.     MOVE.L    $-4(A2),A0
  342.     MOVEQ.L    #$0,D0
  343.     MOVE.B    (A0,D6.L),D0
  344.     MOVE.L    D0,$-10(A2)
  345.     MOVE.L    D0,D2
  346.     MOVEQ.L    #$21,D1            \ $21
  347.     MOVEQ.L    #$0,D0
  348.     CMP.L    D1,D2
  349.     BGE.S    @d                \ +$4 $564B40
  350.  
  351.     MOVEQ.L    #$-1,D0            \ $-1
  352.  
  353. @d
  354.     MOVE.L    D0,-(A6)
  355.     MOVE.L    $-10(A2),D2
  356.     MOVEQ.L    #$7F,D1            \ $7F
  357.     MOVEQ.L    #$0,D0
  358.     CMP.L    D1,D2
  359.     BNE.S    @e                \ +$4 $564B52
  360.  
  361.     MOVEQ.L    #$-1,D0            \ $-1
  362.  
  363. @e
  364.     MOVE.L    D0,-(A6)
  365.     MOVE.L    $-10(A2),D2
  366.     MOVE.L    #$D8,D1            \ $D8
  367.     MOVEQ.L    #$0,D0
  368.     CMP.L    D1,D2
  369.     BLE.S    @f                \ +$4 $564B68
  370.  
  371.     MOVEQ.L    #$-1,D0
  372.  
  373. @f                            \ $00564B68
  374.     OR.L    (A6)+,D0
  375.     OR.L    (A6)+,D0        \ OR
  376.     BEQ.S    @g                \ +$A $564B7A
  377.  
  378.     MOVEQ.L    #$2E,D0
  379.     MOVE.L    D0,$-10(A2)
  380.  
  381. @g
  382.     MOVE.L    $-10(A2),D0
  383.     LEA        $-64(A2),A0
  384.     MOVE.B    D0,(A0,D6.L)
  385.     ADDQ.L    #$1,D6
  386.     CMP.L    D6,D5
  387.     BGT.S    @h                \ +$-74 $564B1E
  388.  
  389.     MOVE.L    -(A3),D6
  390.     MOVE.L    -(A3),D5
  391.     LEA        $-64(A2),A0
  392.     MOVE.L    A0,-(A6)
  393.     MOVEQ.L    #$10,D0            \ $10
  394.     MOVE.L    D0,-(A6)
  395.     JSR        $15A(A5)        \ TYPE
  396.     MOVEQ.L    #$10,D0
  397.     ADD.L    D0,$-4(A2)
  398.     JSR        $272(A5)        \ ?TERMINAL
  399.     TST.L    (A6)+            \ IF
  400.     BEQ.S    @i                \ +$4A $564BFE
  401.  
  402.     JSR        $1D2(A5)        \ KEY
  403.     ADDQ.L    #$4,A6            \ DROP
  404.  
  405. @j                            \ $00564BBE
  406.     JSR        $272(A5)        \ ?TERMINAL
  407.     MOVE.L    (A6)+,$-10(A2)
  408.     BEQ.S    @j                \ +$-A $564BBE
  409.  
  410.     JSR        $1D2(A5)        \ KEY
  411.     MOVEQ.L    #$20,D0            \ $20
  412.     MOVE.L    D0,-(A6)
  413.     CMPM.L    (A6)+,(A6)+
  414.     BEQ.S    @k                \ +$8 $564BDE
  415.  
  416.     BRA.S    @l                \ +$3C $564C16
  417.  
  418. @k                            \ $00564BDE
  419.     MOVE.L    $-10(A2),D1
  420.     MOVE.L    #$2000000,D0
  421.     AND.L    D1,D0
  422.     BEQ.S    @i                \ +$12 $564BFE
  423.  
  424.     LEA        $-64(A2),A0
  425.     MOVE.L    A0,-(A6)
  426.     MOVE.L    $-4(A2),-(A6)
  427.     JSR        word2            \ $-2F0(PC) $56490C
  428.  
  429. @i                            \ $00564BFE
  430.     MOVEQ.L    #$10,D0
  431.     ADD.L    D0,D6
  432.     CMP.L    D6,D5
  433.     BGT        @n                \ +$-1B8 $564A5A
  434.  
  435. @l
  436.     MOVE.L    -(A3),D6
  437.     MOVE.L    -(A3),D5
  438.     JSR        $3C2(A5)        \ CR
  439.     MOVE.L    $-C(A2),D0
  440.     LEA        $24(A4),A0        \ Ref: BASE
  441.     MOVE.L    D0,(A0)
  442.     UNLK    A2
  443.     RTS
  444. END-CODE
  445.  
  446. CODE (.S)                    \ $00564C2C
  447.     JSR        $3C2(A5)        \ CR
  448.     JSR        $352(A5)        \ DEPTH
  449.     TST.L    (A6)+            \ IF
  450.     BEQ.S    @a                \ +$5A $564C90
  451.  
  452.     MOVEQ.L    #$1,D0            \ $1
  453.     MOVE.L    D0,-(A6)
  454.     JSR        $352(A5)        \ DEPTH
  455.     SUBQ.L    #$1,(A6)        \ 1-
  456.     MOVE.L    D5,(A3)+        \ DO
  457.     MOVE.L    D6,(A3)+
  458.     MOVE.L    (A6)+,D6
  459.     MOVE.L    (A6)+,D5
  460.  
  461. @c                            \ $00564C4C
  462.     MOVE.L    D6,D0            \ I
  463.     SUBQ.L    #$1,D0            \ 1-
  464.     ASL.L    #$2,D0
  465.     MOVE.L    (A6,D0.L),-(A6)
  466.     JSR        $50A(A5)        \ .
  467.     MOVEQ.L    #$-1,D0
  468.     ADD.L    D0,D6
  469.     CMP.L    D6,D5
  470.     BLE.S    @c                \ +$-24 $564C4C
  471.  
  472. @d                            \ $00564C74
  473.     MOVE.L    -(A3),D6
  474.     MOVE.L    -(A3),D5
  475.     BSR.S     @e                \ +$A
  476.     DC.B    $6
  477.     DC.B    '<- Top'
  478. .ALIGN
  479.  
  480. @e                            \ $00564C82
  481.     MOVE.L    (A7)+,-(A6)
  482.     JSR        $EA(A5)            \
  483.     JSR        $3C2(A5)        \ CR
  484.     BRA.S    @g                \ +$12 $564C9E
  485.  
  486. @a                            \ $00564C90
  487.     BSR.S    @f                \ +$8
  488.     DC.B    $5
  489.     DC.B    'Empty'
  490. .ALIGN
  491.  
  492. @f                            \ $00564C98
  493.     MOVE.L    (A7)+,-(A6)
  494.     JSR        $EA(A5)            \
  495. @g
  496.     RTS
  497. END-CODE
  498.  
  499. CODE Word3                    \ $00564CA0
  500.     \ this word looks at the pen location relative to the end of the window
  501.     \ and decides whether to hit a carriage return and scroll a line.
  502.     LINK    A2,#$-4
  503.     TST.L    $48(A4)            \ Ref: TaskWindowPointer
  504.     BEQ.S    @a                \ +$70 $564D1C
  505.  
  506.     JSR        $302(A5)        \ #OUT
  507.     MOVE.L    (A6)+,D1
  508.     MOVEQ.L    #$F,D0
  509.     AND.L    D0,D1
  510.     MOVE.L    D1,$-4(A2)
  511.     MOVEQ.L    #$F,D0            \ $F
  512.     CMP.L    D0,D1
  513.     BNE.S    @b                \ +$A $564CD0
  514.  
  515.     MOVEQ.L    #$1,D0
  516.     ADD.L    D0,$-4(A2)
  517.  
  518. @b                            \ $00564CD0
  519.     MOVE.L    $-4(A2),D1
  520.     MOVEQ.L    #$-10,D0
  521.     AND.L    D0,D1
  522.     MOVEQ.L    #$10,D0
  523.     ADD.L    D0,D1
  524.     MOVE.L    D1,$-4(A2)
  525.     JSR        $302(A5)        \ #OUT
  526.     MOVE.L    (A6)+,D0
  527.     MOVEQ.L    #$-10,D1
  528.     AND.L    D1,D0
  529.     ADD.L    D0,$-4(A2)
  530.     MOVE.L    $-4(A2),-(A6)
  531.     JSR        $E2(A5)            \ #COLS
  532.     MOVEQ.L    #$10,D0
  533.     SUB.L    D0,(A6)
  534.     CMPM.L    (A6)+,(A6)+
  535.     BLE.S    @c                \ +$C $564D08
  536.  
  537.     JSR        $3C2(A5)        \ CR
  538.     BRA.S    @e                \ +$14 $564D18
  539.  
  540. @c                            \ $00564D08
  541.     MOVE.L    $-4(A2),-(A6)
  542.     JSR        $302(A5)        \ #OUT
  543.     MOVE.L    (A6)+,D0        \ -
  544.     SUB.L    D0,(A6)
  545.     JSR        $1E2(A5)        \ SPACES
  546.  
  547. @d                            \ $00564D18
  548.     BRA.S    @e                \ +$8 $564D20
  549.  
  550. @a                            \ $00564D1C
  551.     JSR        $3C2(A5)        \ CR
  552.  
  553. @e
  554.     UNLK    A2
  555.     RTS
  556. END-CODE
  557.  
  558. CODE (WORDS)                \ $00564D24
  559.     LINK    A2,#$-1C
  560.     JSR        $3C2(A5)        \ CR
  561.     MOVEQ.L    #$0,D0
  562.     MOVE.L    D0,$-1C(A2)
  563.     LEA        $40(A4),A0        \ Ref: CONTEXT
  564.     MOVE.L    (A0),$-4(A2)
  565.     JSR        VP_$28            \ $-51E(PC)  $56481E
  566.     MOVEA.L    (A6)+,A0
  567.     MOVE.L    (A0),$-8(A2)
  568.     MOVEQ.L    #$1,D0            \ $1
  569.     MOVE.L    D0,-(A6)
  570.     MOVEQ.L    #$0,D0            \ $0
  571.     MOVE.L    D0,-(A6)
  572.     MOVE.L    D5,(A3)+        \ DO
  573.     MOVE.L    D6,(A3)+
  574.     MOVE.L    (A6)+,D6
  575.     MOVE.L    (A6)+,D5
  576.  
  577. @l                            \ $00564D54
  578.     MOVE.L    $-8(A2),-(A6)
  579.     MOVEQ.L    #$32,D0
  580.     ADD.L    D0,(A6)
  581.     MOVE.L    $-4(A2),-(A6)
  582.     MOVEQ.L    #$F,D0
  583.     AND.L    D0,(A6)
  584.     MOVEQ.L    #$8,D0            \ $8
  585.     MOVE.L    D0,-(A6)
  586.     JSR        $B2(A5)            \ *
  587.     MOVE.L    (A6)+,D0        \ +
  588.     MOVEA.L    (A6)+,A0        \ @
  589.     MOVE.L    (A0,D0.L),D1
  590.     MOVE.L    $-8(A2),D0
  591.     ADD.L    D0,D1
  592.     MOVE.L    D1,$-C(A2)
  593.     MOVEQ.L    #$0,D0
  594.     MOVE.L    D0,$-10(A2)
  595.  
  596. @f                            \ $00564D84
  597.     MOVE.L    $-10(A2),D0
  598.     NEG.L    D0                \ NEGATE
  599.     ADD.L    D0,$-C(A2)
  600.     MOVE.L    $-C(A2),-(A6)
  601.     ADDQ.L    #$4,(A6)        \ 4+
  602.     JSR        $5C2(A5)        \ COUNT
  603.     MOVE.L    (A6)+,$-18(A2)
  604.     MOVE.L    (A6)+,$-14(A2)
  605.     MOVE.L    $-18(A2),D1
  606.     MOVEQ.L    #$20,D0
  607.     AND.L    D0,D1
  608.     BNE.S    @a                \ +$20 $564DCC
  609.  
  610.     MOVE.L    $-18(A2),D1
  611.     MOVEQ.L    #$1F,D0
  612.     AND.L    D0,D1
  613.     MOVE.L    D1,$-18(A2)
  614.     MOVE.L    $-14(A2),-(A6)
  615.     MOVE.L    D1,-(A6)
  616.     JSR        $15A(A5)        \ TYPE
  617.     JSR        Word3            \ $-12A(PC) $564CA0
  618.  
  619. @a                            \ $00564DCC
  620.     JSR        $272(A5)        \ ?TERMINAL
  621.     TST.L    (A6)+            \ IF
  622.     BEQ.S    @b                \ +$42 $564E14
  623.  
  624.     JSR        $3C2(A5)        \ CR
  625.     JSR        $1D2(A5)        \ KEY
  626.     ADDQ.L    #$4,A6            \ DROP
  627.     BSR.S    @c                \ +$18
  628.     DC.B    $15
  629.     DC.B    'Space bar to continue'
  630. .ALIGN
  631.  
  632. @c                            \ $00564DF8
  633.     MOVE.L    (A7)+,-(A6)
  634.     JSR        $EA(A5)            \
  635.     JSR        $3C2(A5)        \ CR
  636.     JSR        $1D2(A5)        \ KEY
  637.     MOVEQ.L    #$20,D0            \ $20
  638.     MOVE.L    (A6)+,D1
  639.     CMP.L    D0,D1
  640.     BEQ.S    @b                \ +$8 $564E14
  641.  
  642.     BRA.S    @d                \ +$80 $564E90
  643.  
  644. @b                            \ $00564E14
  645.     MOVEA.L    $-C(A2),A0
  646.     MOVEQ.L    #$0,D0
  647.     MOVE.L    (A0),$-10(A2)
  648.     BNE.S    @e                \ +$4 $564E28
  649.  
  650.     MOVEQ.L    #$-1,D0            \ $-1
  651.  
  652. @e                            \ $00564E28
  653.     TST.L    D0                \ IF
  654.     BEQ        @f                \ +$-A8 $564D84
  655.  
  656.     TST.L    $-4(A2)            \ IF
  657.     BEQ.S    @g                \ +$42 $564E78
  658.  
  659. @j                            \ $00564E3A
  660.     MOVE.L    $-4(A2),-(A6)
  661.     MOVEQ.L    #$10,D0            \ $10
  662.     MOVE.L    D0,-(A6)
  663.     JSR        $AA(A5)            \ /
  664.     MOVE.L    (A6)+,D1
  665.     MOVE.L    D1,$-4(A2)
  666.     MOVEQ.L    #$F,D0
  667.     AND.L    D0,D1
  668.     MOVEQ.L    #$F,D0            \ $F
  669.     CMP.L    D0,D1
  670.     BNE.S    @h                \ +$8 $564E60
  671.  
  672.     BRA.S    @d                \ +$34 $564E90
  673.  
  674. @h                            \ $00564E60
  675.     MOVEQ.L    #$0,D0
  676.     TST.L    $-4(A2)            \ IF
  677.     BNE.S    @i                \ +$4 $564E6C
  678.  
  679.     MOVEQ.L    #$-1,D0            \ $-1
  680.  
  681. @i                            \ $00564E6C
  682.     TST.L    D0                \ IF
  683.     BEQ.S    @j                \ +$-36 $564E3A
  684.  
  685.     BRA.S    @k                \ +$A $564E7E
  686.  
  687. @g                            \ $00564E78
  688.     MOVEQ.L    #$1,D0
  689.     MOVE.L    D0,$-1C(A2)
  690.  
  691. @k                            \ $00564E7E
  692.     TST.L    $-1C(A2)        \ IF
  693.     BEQ        @l                \ +$-130 $564D54
  694.  
  695.     ADDQ.L    #$1,D6
  696.     CMP.L    D6,D5
  697.     BGT        @l                \ +$-138 $564D54
  698.  
  699. @d                            \ $00564E90
  700.     MOVE.L    -(A3),D6
  701.     MOVE.L    -(A3),D5
  702.     JSR        $3C2(A5)        \ CR
  703.     UNLK    A2
  704.     RTS
  705. END-CODE
  706.  
  707. CODE word4                    \ $00564E9C
  708.     LINK    A2,#$-4
  709.     JSR        $5CA(A5)        \ DISK
  710.     MOVE.L    (A6)+,A0
  711.     MOVEQ.L    #$4,D0            \ offset to ioResult
  712.     ADD.L    D0,A0            \ set address
  713.     MOVEQ.L    #$0,D0            \ clear D0
  714.     MOVE.W    (A0),D0            \ get ioResult
  715.     EXT.L    D0
  716.     MOVE.L    D0,$-4(A2)
  717.     BEQ.S    @a                \ +$2E $564EE8
  718.  
  719.     JSR        $3C2(A5)        \ CR
  720.     BSR.S    @b                \ +$10
  721.     DC.B    $C
  722.     DC.B    'File Error #'
  723. .ALIGN
  724.  
  725. @b                            \ $00564ED2
  726.     MOVE.L    (A7)+,-(A6)
  727.     JSR        $EA(A5)            \
  728.     MOVE.L    $-4(A2),-(A6)
  729.     JSR        $50A(A5)        \ .
  730.     JSR        $3C2(A5)        \ CR
  731.     JSR        $26A(A5)        \ ABORT
  732.  
  733. @a                            \ $00564EE8
  734.     UNLK    A2
  735.     RTS
  736. END-CODE
  737.  
  738. CODE word5                    \ $00564EEC
  739.     JSR        $C62(A5)        \ OPERATOR
  740.     MOVEA.L    (A6)+,A0        \ @
  741.     MOVE.L    (A0),-(A6)
  742.     LEA        $-2(A4),A0        \ Ref: STATUS
  743.     MOVE.L    A0,-(A6)
  744.     CMPM.L    (A6)+,(A6)+
  745.     BEQ.S    @a                \ +$32 $564F2E
  746.  
  747.     JSR        $3C2(A5)        \ CR
  748.     BSR.S    @b                \ +$20
  749.     DC.B    $1D
  750.     DC.B    'Only allowed in Operator Task'
  751. .ALIGN
  752.  
  753. @b                            \ $00564F24
  754.     MOVE.L    (A7)+,-(A6)
  755.     JSR        $EA(A5)            \
  756.     JSR        $26A(A5)        \ ABORT
  757.  
  758. @a                            \ $00564F2E
  759.     RTS
  760. END-CODE
  761.  
  762. CODE word6                    \ $00564F30
  763.     LINK    A2,#$-14
  764.     MOVE.L    (A6)+,$-4(A2)
  765.     JSR        word5            \ $-4E(PC) $564EEC
  766.     LEA        $3C(A4),A0        \ Ref: FILEID
  767.     MOVEQ.L    #$0,D0
  768.     MOVE.W    (A0),D0
  769.     MOVE.L    D0,$-C(A2)        \ save current ioRefNum
  770.     MOVEQ.L    #$1,D0            \ $1
  771.     MOVE.L    D0,-(A6)
  772.     MOVE.L    $-4(A2),-(A6)
  773.     LEA        $3E(A4),A0
  774.     MOVEQ.L    #$0,D0
  775.     MOVE.W    (A0),D0
  776.     MOVE.L    D0,-(A6)
  777.     JSR        $5FA(A5)        \ OPENFILE
  778.     MOVE.L    (A6)+,$-14(A2)    \ save new ioRefNum
  779.     JSR        word4            \ $-C8(PC) $564E9C
  780.     LEA        $-148(A5),A0
  781.     ADDQ.L    #$2,A0            \ 2+
  782.     MOVE.L    A0,$-8(A2)
  783.     MOVEQ.L    #$0,D0
  784.     MOVE.L    D0,$-10(A2)
  785.  
  786. @c                            \ $00564F78
  787.     MOVEA.L    $-8(A2),A0
  788.     MOVEQ.L    #$0,D0
  789.     MOVE.W    (A0),D0
  790.     MOVE.L    D0,-(A6)
  791.     MOVE.L    $-10(A2),D2
  792.     MOVEQ.L    #$20,D1            \ $20
  793.     MOVEQ.L    #$0,D0
  794.     CMP.L    D1,D2
  795.     BGE.S    @a                \ +$4 $564F92
  796.  
  797.     MOVEQ.L    #$-1,D0
  798.  
  799. @a                            \ $00564F92
  800.     AND.L    (A6)+,D0
  801.     BEQ.S    @b                \ +$14 $564FAA
  802.  
  803.     MOVEQ.L    #$1,D0
  804.     ADD.L    D0,$-10(A2)
  805.     MOVEQ.L    #$2,D0
  806.     ADD.L    D0,$-8(A2)
  807.     BRA.S    @c                \ +$-2E $564F78
  808.  
  809. @b                            \ $00564FAA
  810.     MOVE.L    $-10(A2),D2
  811.     MOVEQ.L    #$20,D1            \ $20
  812.     CMP.L    D1,D2
  813.     BNE.S    @d                \ +$20 $564FD4
  814.  
  815.     BSR.S    @e                \ +$16
  816.     DC.B    $13
  817.     DC.B    'Too many files open'
  818. .ALIGN
  819.  
  820. @e                            \ $00564FCE
  821.     MOVE.L    (A7)+,-(A6)
  822.     JSR        $212(A5)        \
  823.  
  824. @d                            \ $00564FD4
  825.     MOVE.L    $-14(A2),D0
  826.     MOVEA.L    $-8(A2),A0
  827.     MOVE.W    D0,(A0)
  828.     LEA        $3C(A4),A0        \ Ref: FILEID
  829.     MOVE.W    D0,(A0)
  830.     MOVEQ.L    #$-1,D0            \ $-1
  831.     MOVE.L    D0,-(A6)
  832.     JSR        $CCA(A5)        \ LOAD
  833.     MOVE.L    $-14(A2),-(A6)
  834.     JSR        $602(A5)        \ CLOSEFILE
  835.     JSR        $69A(A5)        \ FLUSH
  836.     JSR        word4            \ $-166(PC) $564E9C
  837.     MOVEQ.L    #$0,D0            \ $0
  838.     MOVEA.L    $-8(A2),A0
  839.     MOVE.W    D0,(A0)
  840.     MOVE.L    $-C(A2),D0
  841.     LEA        $3C(A4),A0        \ Ref: FILEID
  842.     MOVE.W    D0,(A0)
  843.     UNLK    A2
  844.     RTS
  845. END-CODE
  846.  
  847. CODE get.TEXT2                    \ $00565038
  848.     EXG        D4,A7
  849.     CLR.L    -(A7)
  850.     MOVE.L    #$54455854,-(A7)    \ 'TEXT'
  851.     MOVE.W    #$2,-(A7)
  852.             _GetResource        \ Trap #$A9A0
  853.     MOVE.L    (A7)+,-(A6)
  854.     EXG        D4,A7
  855.     RTS
  856. END-CODE
  857.  
  858. CODE detach.lock            \ $0056504E
  859.     EXG        D4,A7
  860.     MOVE.L    (A6),-(A7)
  861.             _DetachResource    \ Trap #$A992
  862.     MOVEA.L    (A6)+,A0
  863.             _HLock            \ Trap #$A029
  864.     EXT.L    D0
  865.     MOVE.L    D0,-(A6)
  866.     EXG        D4,A7
  867.     RTS
  868. END-CODE
  869.  
  870. CODE load.TEXT2                \ $00565060
  871.     LINK    A2,#$-4
  872.     LEA        $-B62(A5),A0
  873.     MOVE.L    (A0),$-4(A2)
  874.     TST.L    $-4(A2)            \ IF
  875.     BNE.S    @a                \ +$34 $5650A6
  876.  
  877.     JSR        get.TEXT2        \ $-40(PC) $565038
  878.     MOVE.L    (A6)+,$-4(A2)
  879.     BEQ.S    @a                \ +$22 $5650A6
  880.  
  881.     MOVE.L    $-4(A2),-(A6)
  882.     JSR        detach.lock        \ $-40(PC) $56504E
  883.     ADDQ.L    #$4,A6            \ DROP
  884.     MOVEA.L    $-4(A2),A0
  885.     MOVE.L    (A0),D0
  886.     EXG        D4,A7
  887.             _StripAddress    \ Trap #$A055
  888.     EXG        D4,A7
  889.     LEA        $-B62(A5),A0
  890.     MOVE.L    D0,(A0)
  891.  
  892. @a                            \ $005650A6
  893.     MOVE.L    $-4(A2),-(A6)
  894.     UNLK    A2
  895.     RTS
  896. END-CODE
  897.  
  898. CODE TEXT2.entry            \ $005650AE
  899.     LINK    A2,#$-4
  900.     MOVE.L    (A6)+,$-4(A2)
  901.     BSR.S    load.TEXT2        \ $-58(PC) $565060
  902.     TST.L    (A6)+            \ IF
  903.     BNE.S    @a                \ +$2A $5650E6
  904.  
  905.     BSR.S    @b                \ +$1C
  906.     DC.B    $18
  907.     DC.B    'Text resource #2 missing'
  908. .ALIGN
  909.  
  910. @b                            \ $005650DC
  911.     MOVE.L    (A7)+,-(A6)
  912.     JSR        $EA(A5)            \
  913.     JSR        $26A(A5)        \ ABORT
  914.  
  915. @a                            \ $005650E6
  916.     LEA        $-B62(A5),A0
  917.     MOVE.L    (A0),-(A6)
  918.     MOVE.L    $-4(A2),D0
  919.     ADD.L    D0,(A6)
  920.     UNLK    A2
  921.     RTS
  922. END-CODE
  923.  
  924. CODE get.Trap.entry            \ $005650F6
  925.     LINK    A2,#$-18
  926.     MOVE.L    A1,-(A7)        \ save A1
  927.     MOVE.L    (A6)+,$-10(A2)    \ hash.code
  928.     MOVE.L    (A6)+,$-C(A2)    \ 10th.ltr
  929.     MOVE.L    (A6)+,$-8(A2)    \ 1st.ltr
  930.     MOVE.L    (A6)+,$-4(A2)    \ @str
  931.     MOVEQ.L    #$0,D0            \ $0
  932.     MOVE.L    D0,-(A6)
  933.     BSR.S    TEXT2.entry        \ $-62(PC) $5650AE
  934.     MOVE.L    (A6)+,A1        \ @record
  935.     MOVE.L    #$25252525,D3    \ end-of-trapdata constant
  936.  
  937. @d                            \ $00565116
  938.     MOVEQ.L    #$0,D1
  939.     MOVE.W    (A1),D1            \ get hash code from trap record
  940.     MOVE.L    $-10(A2),D2        \ get passed-in hash.code
  941.     MOVEQ.L    #$0,D0
  942.     CMP.W    D1,D2            \ are they equal
  943.     BEQ.S    @a                \ +$4 $56512C
  944.  
  945.     MOVEQ.L    #$-1,D0            \ $-1 set true if non-equal
  946.  
  947. @a                            \ $0056512C
  948.     MOVE.L    D0,-(A6)        \ push flag
  949.     MOVE.L    (A1),D1            \ pull out longword from @record
  950.     MOVEQ.L    #$0,D0
  951.     CMP.L    D1,D3            \ are we at the end marker
  952.     BEQ.S    @b                \ +$4 $565144 - branch if so
  953.  
  954.     MOVEQ.L    #$-1,D0            \ TRUE
  955.  
  956. @b                            \ $00565144
  957.     AND.L    (A6)+,D0        \ will be 0 if we are at the correct word
  958.     BEQ.S    @c                \ +$E $565156 we found it
  959.  
  960.     MOVEQ.L    #$1A,D0            \ go get the next record
  961.     ADD.L    D0,A1
  962.     BRA.S    @d                \ +$-3C $565116
  963.  
  964. @c                            \ $00565156
  965.     \ we tentatively have the correct word
  966.     \         _Debugger
  967.     MOVEQ.L    #$0,D1            \ get @record
  968.     MOVE.B    2(A1),D1        \ get first letter of Trapname
  969.     MOVE.L    $-8(A2),D2        \ compare with passed in value
  970.     MOVEQ.L    #$0,D0
  971.     CMP.W    D1,D2
  972.     BNE.S    @e                \ +$4 $565172 - set FALSE if not equal
  973.  
  974.     MOVEQ.L    #$-1,D0            \ $-1
  975.  
  976. @e                            \ $00565172
  977.     MOVE.L    D0,-(A6)        \ push flag
  978.     MOVEQ.L    #0,D1
  979.     MOVE.B    $15(A1),D1        \ get the 10th trap letter
  980.     MOVEQ.L    #$60,D2
  981.     CMP.B    D2,D1
  982.     BLE.S    @f                \ +$C $56519C
  983.  
  984.     MOVE.W    #$DF,D0
  985.     AND.W    D0,D1
  986.  
  987. @f                            \ $0056519C
  988.     MOVE.L    $-C(A2),D2        ( -- flag tenth.ltr 10th.ltr )
  989.     MOVEQ.L    #$0,D0
  990.     CMP.B    D1,D2
  991.     BNE.S    @g                \ +$4 $5651A8 - FALSE if not equal
  992.  
  993.     MOVEQ.L    #$-1,D0
  994.  
  995. @g                            \ $005651A8
  996.     AND.L    D0,(A6)            \ will be TRUE if both 1st and 10th chars equal
  997.     MOVE.L    (A1),D1            \ get longword
  998.     MOVEQ.L    #$0,D0
  999.     CMP.L    D1,D3            \ are we at the end
  1000.     BNE.S    @h                \ +$4 $5651C0
  1001.  
  1002.     MOVEQ.L    #$-1,D0            \ set true if at end
  1003.  
  1004. @h                            \ $005651C0
  1005.     OR.L    (A6)+,D0        \ will be TRUE if equal and not at end
  1006.     BNE.S    @i                \ +$E $5651D2 - branch if TRUE
  1007.  
  1008.     MOVEQ.L    #$1A,D0            \ get next record
  1009.     ADD.L    D0,A1
  1010.     BRA        @d                \ +$-B8 $565116
  1011.  
  1012. @i                            \ $005651D2
  1013.     \ we should have found a good trap definition
  1014.     MOVE.L    (A1),D1            \ get longword
  1015.     CMP.L    D1,D3            \ are we at the end
  1016.     BNE.S    @j                \ +$3C $56521E - branch if not
  1017.  
  1018.     BSR.S    @k                \ +$1E
  1019.     DC.B    $1A
  1020.     DC.B    'Unknown Toolbox routine : '
  1021. .ALIGN
  1022.  
  1023. @k                            \ $00565204
  1024.     MOVE.L    (A7)+,-(A6)
  1025.     JSR        $EA(A5)            \ print it out
  1026.     MOVE.L    $-4(A2),-(A6)
  1027.     JSR        $5C2(A5)        \ COUNT
  1028.     JSR        $15A(A5)        \ TYPE
  1029.     JSR        $3C2(A5)        \ CR
  1030.     JSR        $26A(A5)        \ ABORT
  1031.  
  1032. @j                            \ $0056521E
  1033.     \ now we have found a good ToolBox routine
  1034.     MOVE.L    A1,$-14(A2)
  1035.     MOVEQ.L    #$0,D0
  1036.     MOVE.W    $A(A1),D0        \ get trap word    
  1037.     MOVE.W    #$0FFF,D1        \ mask out high nybble
  1038.     AND.W    D1,D0
  1039.     MOVE.W    #$A000,D1        \ now set the upper nybble
  1040.     OR.W    D1,D0
  1041.     MOVE.L    D0,-(A6)        \ ( -- trap# )
  1042.  
  1043.     MOVEQ.L    #$0,D0            \ offset to byte56
  1044.     MOVE.W    4(A1),D0
  1045.     MOVE.L    D0,-(A6)        \ ( -- trap# byte56 )
  1046.  
  1047.     MOVEQ.L    #$0,D0
  1048.     MOVE.B    3(A1),D0
  1049.     MOVE.L    D0,-(A6)        \ ( -- trap# byte56 byte4 )
  1050.  
  1051.     MOVE.L    6(A1),D0
  1052.     MOVE.L    D0,-(A6)        \ ( -- trap# byte56 byte4 byte7.L )
  1053.  
  1054.     MOVEQ.L    #$0,D0
  1055.     MOVE.B    $A(A1),D0        \ get high byte of trapword
  1056.     ANDI.B    #$F0,D0            \ get flags of trapword
  1057.     MOVE.L    D0,-(A6)        \ ( -- trap# byte56 byte4 byte7.L hi.nyb )
  1058.     MOVE.L    (A7)+,A1
  1059.     UNLK    A2
  1060.     RTS
  1061. END-CODE
  1062.  
  1063. CODE compile.opcode            \ $005652A4
  1064.     MOVE.L    (A6)+,D1
  1065.     TST.L    $-58E(A5)        \ STATE IF
  1066.     BEQ.S    @a                \ +$10 $5652C4
  1067.  
  1068.     MOVE.L    D1,-(A6)
  1069.     JSR        $B22(A5)        \ W,
  1070.     BRA.S    @b                \ +$1E $5652DE
  1071.  
  1072. @a                            \ $005652C4
  1073.     LEA        $-B5E(A5),A0
  1074.     MOVEA.L    (A0),A0
  1075.     MOVE.W    D1,(A0)
  1076.     MOVEQ.L    #$2,D0            \ $2
  1077.     LEA        $-B5E(A5),A0
  1078.     ADD.L    D0,(A0)
  1079.  
  1080. @b                            \ $005652DE
  1081.     RTS
  1082. END-CODE
  1083.  
  1084. CODE build.OSTrap            \ $005652E2
  1085. \ bit 15 of trap record byte56 is clear, so this is an OSTrap call
  1086.     LINK    A2,#$-C
  1087.     MOVE.L    (A6)+,$-C(A2)    \ byte4 of trap record
  1088.     MOVE.L    (A6)+,$-8(A2)    \ byte56 of trap record
  1089.     MOVE.L    (A6)+,$-4(A2)    \ trap#
  1090.  
  1091.     MOVE.L    $-8(A2),D1        \ get b56
  1092.     MOVE.L    #$80,D0            \ is bit 7 set
  1093.     AND.L    D0,D1
  1094.     BEQ.S    @a                \ +$42 $565342- branch if bit 7 is clear
  1095.  
  1096.     \ put a word or longword into A1
  1097.     MOVE.L    $-8(A2),D1        \ byte56 of trap record
  1098.     MOVEQ.L    #$40,D0            \ is bit 6 set
  1099.     AND.L    D0,D1
  1100.     BEQ.S    @b                \ +$14 $565322
  1101.  
  1102.     \ take a longword off the stack and put in A1
  1103.     \ bit 6 is set
  1104.     MOVE.W    #$225E,D0        \ $225E - MOVE.L (A6)+,A1
  1105.     MOVE.L    D0,-(A6)
  1106.     JSR        compile.opcode    \ $-78(PC) $5652A4
  1107.     BRA.S    @a                \ +$24 $565342
  1108.  
  1109. @b                            \ $00565322
  1110.     \
  1111.     \ take a longword off the stack and store a word into A1
  1112.     MOVE.W    #$326E,D0        \ $326E - MOVE.L 2(A6),A1
  1113.     MOVE.L    D0,-(A6)
  1114.     JSR        compile.opcode    \ $-88(PC) $5652A4
  1115.     MOVEQ.L    #$2,D0            \ $2
  1116.     MOVE.L    D0,-(A6)
  1117.     JSR        compile.opcode    \ $-90(PC) $5652A4
  1118.     MOVE.W    #$588E,D0        \ $588E - ADDQ.L #4,A6
  1119.     MOVE.L    D0,-(A6)
  1120.     JSR        compile.opcode    \ $-9C(PC) $5652A4
  1121.  
  1122. @a                            \ $00565342
  1123.     \ test to see if we need to load D0
  1124.     MOVE.L    $-8(A2),D1
  1125.     MOVE.L    #$200,D0        \ bit 9 is set if D0 needs to be loaded
  1126.     AND.L    D0,D1
  1127.     BEQ.S    @c                \ +$46 $565396
  1128.  
  1129.     \ bit 9 is set, now test for word or longword
  1130.     MOVE.L    $-8(A2),D1
  1131.     MOVE.L    #$100,D0        \ bit 8 is set if we load a longword
  1132.     AND.L    D0,D1
  1133.     BEQ.S    @d                \ +$14 $565376
  1134.  
  1135.     \ load a longword from the stack into D0
  1136.     MOVE.W    #$201E,D0        \ $201E - MOVE.L (A6)+,D0
  1137.     MOVE.L    D0,-(A6)
  1138.     JSR        compile.opcode    \ $-CC(PC) $5652A4
  1139.     BRA.S    @c                \ +$24 $565396
  1140.  
  1141. @d                            \ $00565376
  1142.     \ load a word into D0 from a longword on the stack
  1143.     MOVE.W    #$302E,D0        \ $302E - MOVE.W 2(A6),D0
  1144.     MOVE.L    D0,-(A6)
  1145.     JSR        compile.opcode    \ $-DC(PC) $5652A4
  1146.     MOVEQ.L    #$2,D0            \ $2
  1147.     MOVE.L    D0,-(A6)
  1148.     JSR        compile.opcode    \ $-E4(PC) $5652A4
  1149.     MOVE.W    #$588E,D0        \ $588E - ADDQ.L #4,A6
  1150.     MOVE.L    D0,-(A6)
  1151.     JSR        compile.opcode    \ $-F0(PC) $5652A4
  1152.  
  1153. @c                            \ $00565396
  1154.     \ test to see if we need to load A0
  1155.     MOVE.L    $-8(A2),D1
  1156.     MOVE.L    #$800,D0        \ bit 11 is set if we need to load A0
  1157.     AND.L    D0,D1
  1158.     BEQ.S    @e                \ +$46 $5653EA
  1159.  
  1160.     \ bit 11 is set, now test for word or longword
  1161.     MOVE.L    $-8(A2),D1
  1162.     MOVE.L    #$400,D0        \ bit 10 is set for a longword
  1163.     AND.L    D0,D1
  1164.     BEQ.S    @f                \ +$14 $5653CA
  1165.  
  1166.     \ load a longword into A0
  1167.     MOVE.W    #$205E,D0        \ $205E - MOVE.L (A6)+,A0
  1168.     MOVE.L    D0,-(A6)
  1169.     JSR        compile.opcode    \ $-120(PC) $5652A4
  1170.     BRA.S    @e                \ +$24 $5653EA
  1171.  
  1172. @f                            \ $005653CA
  1173.     \ load a word into A0
  1174.     MOVE.W    #$306E,D0        \ $306E - MOVE.W 2(A6),A0
  1175.     MOVE.L    D0,-(A6)
  1176.     JSR        compile.opcode    \ $-130(PC) $5652A4
  1177.     MOVEQ.L    #$2,D0            \ $2
  1178.     MOVE.L    D0,-(A6)
  1179.     JSR        compile.opcode    \ $-138(PC) $5652A4
  1180.     MOVE.W    #$588E,D0        \ $588E - ADDQ.L #4,A6
  1181.     MOVE.L    D0,-(A6)
  1182.     JSR        compile.opcode    \ $-144(PC) $5652A4
  1183.  
  1184. @e                            \ $005653EA
  1185.     \ compile the trap opcode
  1186.     MOVE.L    $-4(A2),-(A6)
  1187.     JSR        compile.opcode    \ $-14C(PC) $5652A4 
  1188.  
  1189.     \ test bit 5 of byte56 - get result from A0
  1190.     MOVE.L    $-8(A2),D1
  1191.     MOVEQ.L    #$20,D0            \ bit 5 set if A0 has result
  1192.     AND.L    D0,D1
  1193.     BEQ.S    @g                \ +$3A $565436
  1194.  
  1195.     \ push a result from A0
  1196.     MOVE.L    $-8(A2),D1
  1197.     MOVEQ.L    #$10,D0            \ bit 4 set if longword
  1198.     AND.L    D0,D1
  1199.     BEQ.S    @h                \ +$14 $56541E
  1200.  
  1201.     \ move longword from A0 to stack
  1202.     MOVE.W    #$2D08,D0        \ $2D08 - MOVE.L A0,-(A6)
  1203.     MOVE.L    D0,-(A6)
  1204.     JSR        compile.opcode    \ $-174(PC) $5652A4
  1205.     BRA.S    @g                \ +$1C $565436
  1206.  
  1207. @h                            \ $0056541E
  1208.     \ move word from A0 to stack
  1209.     MOVE.W    #$3D08,D0        \ $3D08 - MOVE.W A0,-(A6)
  1210.     MOVE.L    D0,-(A6)
  1211.     JSR        compile.opcode    \ $-184(PC) $5652A4
  1212.     MOVE.W    #$4266,D0        \ $4266 - CLR.W -(A6)
  1213.     MOVE.L    D0,-(A6)
  1214.     JSR        compile.opcode    \ $-190(PC) $5652A4
  1215.  
  1216. @g                            \ $00565436
  1217.     \ bit 3 set if result is in D0
  1218.     MOVE.L    $-8(A2),D1
  1219.     MOVEQ.L    #$8,D0            \ bit 3 set if result in D0
  1220.     AND.L    D0,D1
  1221.     BEQ.S    @i                \ +$2A $56546A
  1222.  
  1223.     MOVE.L    $-8(A2),D1
  1224.     MOVEQ.L    #$4,D0            \ bit 2 set if result is longword
  1225.     AND.L    D0,D1
  1226.     BNE.S    @j                \ +$10 $56545E
  1227.  
  1228.     MOVE.W    #$48C0,D0        \ $48C0 - EXT.L D0
  1229.     MOVE.L    D0,-(A6)
  1230.     JSR        compile.opcode    \ $-1B8(PC) $5652A4
  1231.  
  1232. @j                            \ $0056545E
  1233.     MOVE.W    #$2D00,D0        \ $2D00 - MOVE.L D0,-(A6)
  1234.     MOVE.L    D0,-(A6)
  1235.     JSR        compile.opcode    \ $-1C4(PC) $5652A4
  1236.  
  1237. @i                            \ $0056546A
  1238.     \ bit 1 set for result in A1
  1239.     MOVE.L    $-8(A2),D1
  1240.     MOVEQ.L    #$2,D0            \ is bit 1 set
  1241.     AND.L    D0,D1
  1242.     BEQ.S    @k                \ +$3A $5654AE
  1243.  
  1244.     MOVE.L    $-8(A2),D1
  1245.     MOVEQ.L    #$1,D0            \ bit 0 set for longword
  1246.     AND.L    D0,D1
  1247.     BEQ.S    @l                \ +$14 $565496
  1248.  
  1249.     \ result in A1 is a longword
  1250.     MOVE.W    #$2D09,D0        \ $2D09 - MOVE.L A1,-(A6)
  1251.     MOVE.L    D0,-(A6)
  1252.     JSR        compile.opcode    \ $-1EC(PC) $5652A4
  1253.     BRA.S    @k                \ +$1C $5654AE
  1254.  
  1255. @l                            \ $00565496
  1256.     \ result in A1 is a word
  1257.     MOVE.W    #$3D09,D0        \ $3D09 - MOVE.W A1,-(A6)
  1258.     MOVE.L    D0,-(A6)
  1259.     JSR        compile.opcode    \ $-1FC(PC) $5652A4
  1260.     MOVE.W    #$4266,D0        \ $4266 - CLR.W -(A6)
  1261.     MOVE.L    D0,-(A6)
  1262.     JSR        compile.opcode    \ $-208(PC) $5652A4
  1263.  
  1264. @k                            \ $005654AE
  1265.     UNLK    A2
  1266.     RTS
  1267. END-CODE
  1268.  
  1269. CODE Word8                    \ $005654B2
  1270.     \ this routine is for ToolBox words
  1271.     \ byte4 contains the number of parameters left to be transferred to
  1272.     \ the A7 stack
  1273.     \ for the nth parameter, this routine extracts the bit in byte56 that
  1274.     \ tells us whether it is a word or longword
  1275.     LINK    A2,#$-C
  1276.     MOVE.L    (A6)+,$-8(A2)    \ byte4 & $3F - 1
  1277.     MOVE.L    (A6)+,$-4(A2)    \ byte 56
  1278.     MOVEQ.L    #$1,D0
  1279.     MOVE.L    D0,$-C(A2)        \ 1 -> lvar1
  1280.  
  1281. @b                            \ $005654C4 BEGIN
  1282.     TST.L    $-8(A2)            \ byte4 IF
  1283.     BEQ.S    @a                \ +$18 $5654E2 WHILE
  1284.  
  1285.     MOVE.L    $-C(A2),D0        \ lvar1
  1286.     ADD.L    D0,D0            \ 2* - shift the bit left 1 bit
  1287.     MOVE.L    D0,$-C(A2)        \ -> lvar1
  1288.     MOVEQ.L    #$-1,D0            \ -1
  1289.     ADD.L    D0,$-8(A2)        \ +> byte4
  1290.     BRA.S    @b                \ +$-1A $5654C4 REPEAT
  1291.  
  1292. @a                            \ $005654E2
  1293.     MOVE.L    $-4(A2),D1        \ byte56
  1294.     MOVE.L    $-C(A2),D0        \ lvar1
  1295.     AND.L    D0,D1            \ and
  1296.     MOVE.L    D1,-(A6)
  1297.     UNLK    A2
  1298.     RTS
  1299. END-CODE
  1300.  
  1301. CODE Build.ToolTrap            \ $005654F0
  1302.     \ bit 15 of byte56 is set
  1303.     LINK    A2,#$-10
  1304.     MOVE.L    (A6)+,$-8(A2)    \ byte56
  1305.     MOVE.L    (A6)+,$-4(A2)    \ byte4
  1306.     MOVE.L    $-4(A2),D1
  1307.     MOVEQ.L    #$3F,D0            \ clear bits 6-7 of byte4
  1308.     AND.L    D0,D1
  1309.     MOVE.L    D1,$-C(A2)        \ store in lvar1 - is count of parameters on stack
  1310.     MOVE.L    $-4(A2),D1        \ byte4
  1311.     MOVE.L    #$C0,D0            \ get flag bits
  1312.     AND.L    D0,D1
  1313.     MOVE.L    D1,$-10(A2)        \ lvar2 - flag bits
  1314.     BEQ.S    @a                \ +$2E $56554C - branch if flag bits are clear
  1315.  
  1316.     \ at least one of the result bits are set
  1317.     MOVE.L    $-10(A2),D1
  1318.     MOVEQ.L    #$40,D0            \ $40 - test bit 6
  1319.     CMP.L    D0,D1
  1320.     BNE.S    @b                \ +$14 $565540
  1321.  
  1322.     \ bit 6 is set, so allocate a longword result
  1323.     MOVE.W    #$42A7,D0        \ $42A7 - CLR.L -(A7)
  1324.     MOVE.L    D0,-(A6)
  1325.     JSR        compile.opcode    \ $-296(PC) $5652A4
  1326.     BRA.S    @a                \ +$10 $56554C
  1327.  
  1328. @b                            \ $00565540
  1329.     \ bit 6 is clear, bit 7 is set, so allocate a word result
  1330.     MOVE.W    #$4267,D0        \ $4267 - CLR.W -(A7)
  1331.     MOVE.L    D0,-(A6)
  1332.     JSR        compile.opcode    \ $-2A6(PC) $5652A4
  1333.  
  1334. @a                            \ $0056554C
  1335.     MOVE.L    $-C(A2),D0        \ lvar1
  1336.     BEQ.S    @c                \ +$78 $5655CA -  no more parameters to push
  1337.  
  1338.     MOVEQ.L    #$-1,D0
  1339.     ADD.L    D0,$-C(A2)        \ subtract 1 from parameter count
  1340.     MOVE.L    $-8(A2),-(A6)    \ byte56
  1341.     MOVE.L    $-C(A2),-(A6)    \ count-x
  1342.     JSR        Word8            \ $-B4(PC) $5654B2 - get bit value for next parameter
  1343.     TST.L    (A6)+            \ IF - is the value is a word-length push
  1344.     BEQ.S    @d                \ +$3E $5655A8
  1345.  
  1346.     MOVE.L    $-C(A2),D0        \ get parameter count
  1347.     BEQ.S    @e                \ +$24 $565598 top word on stack
  1348.  
  1349.     MOVE.W    #$2F2E,D0        \ $2F2E - MOVE.L d(A6),-(A7)
  1350.     MOVE.L    D0,-(A6)
  1351.     JSR        compile.opcode    \ $-2DE(PC) $5652A4
  1352.     MOVE.L    $-C(A2),-(A6)    \ get count
  1353.     MOVEQ.L    #$4,D0            \ $4
  1354.     MOVE.L    D0,-(A6)
  1355.     JSR        $B2(A5)            \ * - multiply by four to get stack offset
  1356.     JSR        compile.opcode    \ $-2EE(PC) $5652A4
  1357.     BRA.S    @f                \ +$10 $5655A4
  1358.  
  1359. @e                            \ $00565598
  1360.     \ push the top longword
  1361.     MOVE.W    #$2F16,D0        \ $2F16 - MOVE.L (A6),-(A7)
  1362.     MOVE.L    D0,-(A6)
  1363.     JSR        compile.opcode    \ $-2FE(PC) $5652A4
  1364.  
  1365. @f                            \ $005655A4
  1366.     BRA.S    @g                \ +$22 $5655C6
  1367.  
  1368. @d                            \ $005655A8
  1369.     \ push a word-length value from a longword on the stack
  1370.     MOVE.W    #$3F2E,D0        \ $3F2E - MOVE.W d(A6),-(A7
  1371.     MOVE.L    D0,-(A6)
  1372.     JSR        compile.opcode    \ $-30E(PC) $5652A4
  1373.     MOVE.L    $-C(A2),-(A6)    \ get count
  1374.     MOVEQ.L    #$4,D0            \ $4 - offset into A6 stack
  1375.     MOVE.L    D0,-(A6)
  1376.     JSR        $B2(A5)            \ *
  1377.     ADDQ.L    #$2,(A6)        \ 2+ - add2 becuz it is a word value
  1378.     JSR        compile.opcode    \ $-320(PC) $5652A4
  1379.  
  1380. @g                            \ $005655C6
  1381.     BRA.S    @a                \ +$-7A $56554C
  1382.  
  1383. @c                            \ $005655CA
  1384.     \ no more paramenters to push
  1385.     MOVE.L    $-4(A2),D1        \ get byte4
  1386.     MOVEQ.L    #$3F,D0            \ mask out flags
  1387.     AND.L    D0,D1
  1388.     MOVE.L    D1,$-10(A2)        \ put in lvar
  1389.     BEQ.S    @h                \ +$20 $5655FC - there are no A6 parms
  1390.  
  1391.     \ clear the A6 parms stack
  1392.     MOVE.W    #$DCFC,D0        \ $DCFC - ADDA.W #n,A6
  1393.     MOVE.L    D0,-(A6)
  1394.     JSR        compile.opcode    \ $-346(PC) $5652A4
  1395.     MOVE.L    $-10(A2),-(A6)    \ get count
  1396.     MOVEQ.L    #$4,D0            \ $4
  1397.     MOVE.L    D0,-(A6)
  1398.     JSR        $B2(A5)            \ * - number of longwords on stack
  1399.     JSR        compile.opcode    \ $-356(PC) $5652A4
  1400.  
  1401. @h                            \ $005655FC
  1402.     UNLK    A2
  1403.     RTS
  1404. END-CODE
  1405.  
  1406. CODE compile.result            \ $00565600
  1407.     LINK    A2,#$-8
  1408.     MOVE.L    (A6)+,$-4(A2)    \ byte4
  1409.     MOVE.L    $-4(A2),D1
  1410.     MOVEQ.L    #$60,D0
  1411.     ADD.W    D0,D0            \  =$C0 - are the results bits set
  1412.     AND.L    D0,D1
  1413.     MOVE.L    D1,$-8(A2)        \ save results bits
  1414.     BEQ.S    @a                \ IF -are any results bits set
  1415.  
  1416.     MOVEQ.L    #$40,D0            \ $40 bit 6 is set for longword result
  1417.     CMP.L    D0,D1
  1418.     BNE.S    @b                \ +$14 $565640
  1419.  
  1420.     MOVE.W    #$2D1F,D0        \ $2D1F - MOVE.L (A7)+,-(A6)
  1421.     MOVE.L    D0,-(A6)
  1422.     JSR        compile.opcode    \ $5652A4
  1423.     BRA.S    @a                \ +$28 $565664
  1424.  
  1425. @b                            \ $00565640
  1426.     MOVE.W    #$301F,D0        \ $301F - MOVE.W (A7)+,D0
  1427.     MOVE.L    D0,-(A6)
  1428.     JSR        compile.opcode    \ $5652A4
  1429.     MOVE.W    #$48C0,D0        \ $48C0 - EXT.L    D0
  1430.     MOVE.L    D0,-(A6)
  1431.     JSR        compile.opcode    \ $5652A4
  1432.     MOVE.W    #$2D00,D0        \ $2D00 - MOVE.L D0,-(A6)
  1433.     MOVE.L    D0,-(A6)
  1434.     JSR        compile.opcode    \ $5652A4
  1435.  
  1436. @a                            \ $00565664
  1437.     UNLK    A2
  1438.     RTS
  1439. END-CODE
  1440.  
  1441. CODE calc.stacksize  ( byte4 byte56 -- stacksize )
  1442.     MOVE.L    (A6)+,D0    \ byte56
  1443.     MOVE.L    (A6)+,D1    \ get byte4
  1444.     MOVEQ.L    #$3F,D2        \ mask out result bits
  1445.     AND.L    D2,D1
  1446.     MOVEQ.L    #0,D2        \ size of stack will be accumulated here
  1447.     BRA.S    @testforend
  1448.  
  1449. @myloop
  1450.     LSR.L    #1,D0
  1451.     BCS.S    @itsalong
  1452.  
  1453.     ADDQ.L    #2,D2
  1454.     BRA.S    @testforend
  1455.  
  1456. @itsalong
  1457.     ADDQ.L    #4,D2
  1458.  
  1459. @testforend
  1460.     DBRA    D1,@myloop
  1461.  
  1462.     MOVE.L    D2,-(A6)
  1463.     RTS
  1464. END-CODE
  1465.  
  1466. CODE compile.CTBTrap ( byte4 byte56 selector -- )
  1467.     \ call this when we have to compile a Comm Toolbox Trap
  1468.     LINK    A2,#$-14
  1469.     MOVE.L    (A6)+,$-C(A2)    \ selector
  1470.     MOVE.L    (A6)+,$-8(A2)    \ byte56
  1471.     MOVE.L    (A6)+,$-4(A2)    \ byte4
  1472.     MOVE.L    $-4(A2),D1
  1473.     MOVEQ.L    #$3F,D0            \ clear bits 6-7 of byte4
  1474.     AND.L    D1,D0
  1475.     MOVE.L    D0,$-10(A2)        \ store in lvar1 - is count of parameters on stack
  1476.     MOVE.L    #$C0,D0            \ get flag bits
  1477.     AND.L    D1,D0
  1478.     MOVE.L    D0,$-14(A2)        \ lvar2 - flag bits
  1479.  
  1480. @a
  1481.     TST.L    $-10(A2)        \ lvar1
  1482.     BEQ.S    @c                \ +$78 $5655CA -  no more parameters to push
  1483.  
  1484.     MOVEQ.L    #$-1,D0
  1485.     ADD.L    D0,$-10(A2)        \ subtract 1 from parameter count
  1486.     MOVE.L    $-8(A2),-(A6)    \ byte56
  1487.     MOVE.L    $-10(A2),-(A6)    \ count-x
  1488.     JSR        Word8            \ get bit value for next parameter
  1489.     TST.L    (A6)+            \ IF - is the value is a word-length push
  1490.     BEQ.S    @d                \ 
  1491.  
  1492.     TST.L    $-10(A2)        \ get parameter count
  1493.     BEQ.S    @e                \ top word on stack
  1494.  
  1495.     MOVE.W    #$2F2E,D0        \ $2F2E - MOVE.L d(A6),-(A7)
  1496.     MOVE.L    D0,-(A6)
  1497.     JSR        compile.opcode    \ 
  1498.     MOVE.L    $-10(A2),-(A6)    \ get count
  1499.     MOVEQ.L    #$4,D0            \ $4
  1500.     MOVE.L    D0,-(A6)
  1501.     JSR        $B2(A5)            \ * - multiply by four to get stack offset
  1502.     JSR        compile.opcode    \ 
  1503.     BRA.S    @f                \ 
  1504.  
  1505. @e                            \ 
  1506.     \ push the top longword
  1507.     MOVE.W    #$2F16,D0        \ $2F16 - MOVE.L (A6),-(A7)
  1508.     MOVE.L    D0,-(A6)
  1509.     JSR        compile.opcode    \ 
  1510.  
  1511. @f                            \ 
  1512.     BRA.S    @g                \ 
  1513.  
  1514. @d                            \ 
  1515.     \ push a word-length value from a longword on the stack
  1516.     MOVE.W    #$3F2E,D0        \ $3F2E - MOVE.W d(A6),-(A7
  1517.     MOVE.L    D0,-(A6)
  1518.     JSR        compile.opcode    \ 
  1519.     MOVE.L    $-10(A2),-(A6)    \ get count
  1520.     MOVEQ.L    #$4,D0            \ $4 - offset into A6 stack
  1521.     MOVE.L    D0,-(A6)
  1522.     JSR        $B2(A5)            \ *
  1523.     ADDQ.L    #$2,(A6)        \ 2+ - add2 becuz it is a word value
  1524.     JSR        compile.opcode    \ 
  1525.  
  1526. @g                            \ we are not done xfering data to A7 stack
  1527.     BRA.S    @a                \ go back and get the next parameter
  1528.  
  1529. @c                            \ 
  1530.     \ no more paramenters to push
  1531.     MOVE.L    $-4(A2),D1        \ get byte4
  1532.     MOVEQ.L    #$3F,D0            \ mask out flags
  1533.     AND.L    D0,D1
  1534.     MOVE.L    D1,$-10(A2)        \ put in lvar
  1535.     BEQ.S    @h                \ there are no A6 parms
  1536.  
  1537.     \ clear the A6 parms stack
  1538.     MOVE.W    #$DCFC,D0        \ $DCFC - ADDA.W #n,A6
  1539.     MOVE.L    D0,-(A6)
  1540.     JSR        compile.opcode    \ 
  1541.     MOVE.L    $-10(A2),-(A6)    \ get count
  1542.     MOVEQ.L    #$4,D0            \ $4
  1543.     MOVE.L    D0,-(A6)
  1544.     JSR        $B2(A5)            \ * - number of longwords on stack
  1545.     JSR        compile.opcode    \ 
  1546.  
  1547. @h                            \ $005655FC
  1548.     \ now compile the selector
  1549.     MOVE.W    #$3F3C,D0        \ MOVE.W #nnn,-(A7)
  1550.     MOVE.L    D0,-(A6)
  1551.     JSR        compile.opcode
  1552.     MOVE.L    $-C(A2),-(A6)
  1553.     JSR        compile.opcode
  1554.  
  1555.     \ compile the A7->A0 and the trap word
  1556.     MOVE.W    #$204F,D0        \ MOVE.L A7,A0
  1557.     MOVE.L    D0,-(A6)
  1558.     JSR        compile.opcode
  1559.     MOVE.W    #$A08B,D0        \ _CommToolBoxDispatch
  1560.     MOVE.L    D0,-(A6)
  1561.     JSR        compile.opcode
  1562.  
  1563.     \ now deallocate the A7 stack frame
  1564.     MOVE.L    $-4(A2),-(A6)
  1565.     MOVE.L    $-8(A2),-(A6)
  1566.     JSR        calc.stacksize
  1567.     MOVE.L    (A6)+,D0
  1568.     ADDQ.L    #2,D0            \ add 2 for the selector
  1569.     MOVEQ.L    #8,D1
  1570.     CMP.L    D1,D0
  1571.     BGT.S    @large.sframe
  1572.  
  1573.     ANDI.W    #7,D0        \ need only low three bits
  1574.     MOVEQ.L    #9,D1        \ shift stacksize to bits 9-11
  1575.     LSL.W    D1,D0        
  1576.     ADDI.W    #$508F,D0    \ create ADDQ.L    #n,A7
  1577.     MOVE.L    D0,-(A6)
  1578.     JSR        compile.opcode
  1579.     BRA.S    @save.result
  1580.  
  1581. @large.sframe
  1582.     MOVE.L    D0,-(A6)        \ save the stacksize
  1583.     MOVE.W    #$DEFC,D0        \ ADDA.W #nnn,A7
  1584.     MOVE.L    D0,-(A6)
  1585.     JSR        compile.opcode
  1586.     JSR        compile.opcode    \ compile the stacksize
  1587.  
  1588. @save.result
  1589.     MOVE.L    $-14(A2),D0        \ are any result bits set
  1590.     BEQ.S    @exit.here
  1591.  
  1592.     BTST    #7,D0            \ bit 7 is set for word result
  1593.     BEQ.S    @do.lword        \ branch for longword result
  1594.  
  1595.     \ do a word result
  1596.     MOVE.W    #$48C0,D0        \ $48C0 - EXT.L    D0
  1597.     MOVE.L    D0,-(A6)
  1598.     JSR        compile.opcode    \ $5652A4
  1599.  
  1600. @do.lword
  1601.     MOVE.W    #$2D00,D0        \ $2D00 - MOVE.L D0,-(A6)
  1602.     MOVE.L    D0,-(A6)
  1603.     JSR        compile.opcode    \ $5652A4
  1604.     
  1605. @exit.here
  1606.     UNLK    A2
  1607.     RTS
  1608. END-CODE
  1609.  
  1610. : special.trap
  1611.     { byte4 byte56 trap# selector flags | -- }
  1612.     trap# $0FFF AND
  1613.     CASE
  1614.         $8B \ CommToolBoxDispatch
  1615.         OF
  1616.             byte4 byte56 selector compile.CTBTrap    \ compile the whole thing
  1617.         ENDOF
  1618.     ENDCASE
  1619.     ;
  1620.  
  1621. CODE compile.selector    ( selector flagbyte -- )
  1622.     LINK    A2,#$-4
  1623.     MOVE.L    (A6)+,D0        \ flag byte of trap word
  1624.     MOVE.L    (A6)+,D1        \ selector
  1625.  
  1626.     MOVEQ.L    #$40,D2
  1627.     AND.B    D0,D2            \ is bit 14 set indicating selector in register
  1628.     BEQ        @c                \ +$36 $5656DC
  1629.  
  1630.     \ bit 14 of trap# is set - put selector in D0
  1631.     \ now  check for longword bit
  1632.     MOVEQ.L    #$20,D2
  1633.     AND.B    D0,D2
  1634.     BNE.S    @lword2D0        \ branch if bit is set
  1635.  
  1636.     MOVE.L    D1,D2            \ is selector plus
  1637.     BPL.S    @test.for.quick
  1638.  
  1639.     NEG.L    D2                \ make negative selector positive                
  1640.  
  1641. @test.for.quick
  1642.     MOVEQ.L    #$7F,D0
  1643.     CMP.L    D0,D2
  1644.     BGT.S    @big.wordD0
  1645.  
  1646.     \ we can use a moveq to D0
  1647.     MOVE.W    #$7000,D0
  1648.     ANDI.W    #$00FF,D1
  1649.     ADD.W    D1,D0
  1650.     MOVE.L    D0,-(A6)
  1651.     JSR        compile.opcode
  1652.     BRA.S    @e
  1653.  
  1654. @big.wordD0
  1655.     MOVE.L    D1,$-4(A2)        \ save the selector
  1656.     MOVE.W    #$303C,D0        \ $303C - MOVE.W #n,D0
  1657.     MOVE.L    D0,-(A6)
  1658.     JSR        compile.opcode    \ $-41A(PC) $5652A4
  1659.     MOVE.L    $-4(A2),-(A6)    \ get selector
  1660.     JSR        compile.opcode    \ compile high word
  1661.     BRA.S    @e                \ +$10 $5656D8
  1662.  
  1663. @lword2D0
  1664.     MOVE.L    D1,D2            \ is selector plus
  1665.     BPL.S    @test.for.quick2
  1666.  
  1667.     NEG.L    D2                \ make negative selector positive                
  1668.  
  1669. @test.for.quick2
  1670.     MOVEQ.L    #$7F,D0
  1671.     CMP.L    D0,D2
  1672.     BGT.S    @big.lwordD0
  1673.  
  1674.     \ we can use a moveq to D0
  1675.     MOVE.W    #$7000,D0
  1676.     ANDI.W    #$00FF,D1
  1677.     ADD.W    D1,D0
  1678.     MOVE.L    D0,-(A6)
  1679.     JSR        compile.opcode
  1680.     BRA.S    @e
  1681.  
  1682. @big.lwordD0
  1683.     MOVE.L    D1,$-4(A2)        \ save the selector
  1684.     MOVE.W    #$203C,D0        \ $203C - MOVE.L #n,D0
  1685.     MOVE.L    D0,-(A6)
  1686.     JSR        compile.opcode    \ $-41A(PC) $5652A4
  1687.     MOVE.L    $-4(A2),D0        \ get selector
  1688.     SWAP.W    D0                \ compile high word of selector
  1689.     MOVE.L    D0,-(A6)        \ push on stack
  1690.     JSR        compile.opcode    \ compile high word
  1691.     MOVE.L    $-4(A2),-(A6)    \ compile selector low word
  1692.     JSR        compile.opcode    \ $-422(PC) $5652A4
  1693.  
  1694. @e                            \ $005656D8
  1695.     BRA        @b                \ 
  1696.  
  1697. @c                            \ $005656DC
  1698.     \ bit14 of trap# is zero, so compile a selector on the stack
  1699.     \ first test for longword on the stack
  1700.     MOVEQ.L    #$20,D2            \ the bit is set for longword on stack
  1701.     AND.B    D0,D2
  1702.     BNE.S    @do.lstack
  1703.  
  1704.     TST.L    D1                \ IF selector equals zero
  1705.     BEQ.S    @f                \ +$1C $5656FE
  1706.  
  1707.     MOVE.L    D1,$-4(A2)
  1708.     MOVE.W    #$3F3C,D0        \ $3F3C - MOVE.W #n,-(A7)
  1709.     MOVE.L    D0,-(A6)
  1710.     JSR        compile.opcode    \ $-44C(PC) $5652A4
  1711.     MOVE.L    $-4(A2),-(A6)    \ selector
  1712.     JSR        compile.opcode    \ $-454(PC) $5652A4
  1713.     BRA.S    @b                \ +$10 $56570A
  1714.  
  1715. @f                            \ $005656FE
  1716.     MOVE.W    #$4267,D0        \ $4267 - CLR.W -(A7)
  1717.     MOVE.L    D0,-(A6)
  1718.     JSR        compile.opcode    \ $-464(PC) $5652A4
  1719.     BRA.S    @b
  1720.  
  1721. @do.lstack
  1722.     TST.L    D1                \ IF selector equals zero
  1723.     BEQ.S    @f2                \ branch if selector is zero
  1724.  
  1725.     MOVE.L    D1,D2
  1726.     BPL.S    @xxx2
  1727.  
  1728.     NEG.L    D2
  1729.  
  1730. @xxx2
  1731.     MOVEQ.L    #$7F,D0
  1732.     CMP.L    D0,D2
  1733.     BGT.S    @full.lword
  1734.  
  1735.     MOVE.W    #$7000,D0
  1736.     ANDI.W    #$00FF,D1
  1737.     ADD.W    D1,D0
  1738.     MOVE.L    D0,-(A6)
  1739.     JSR        compile.opcode
  1740.     MOVE.W    #$2F00,D0        \ $2F00 - MOVE.L D0,-(A7)
  1741.     MOVE.L    D0,-(A6)
  1742.     JSR        compile.opcode
  1743.     BRA.S    @b
  1744.  
  1745. @full.lword
  1746.     MOVE.L    D1,$-4(A2)        \ save selector
  1747.     MOVE.W    #$2F3C,D0        \ $2F3C - MOVE.L #n,-(A7)
  1748.     MOVE.L    D0,-(A6)
  1749.     JSR        compile.opcode    \ $-44C(PC) $5652A4
  1750.     MOVE.L    $-4(A2),D0        \ selector
  1751.     SWAP.W    D0
  1752.     MOVE.L    D0,-(A6)        \ first compile high word of selector
  1753.     JSR        compile.opcode    \ $-454(PC) $5652A4
  1754.     MOVE.L    $-4(A2),-(A6)    \ the compile low word
  1755.     JSR        compile.opcode
  1756.     BRA.S    @b                \ +$10 $56570A
  1757.  
  1758. @f2                            \ $005656FE
  1759.     MOVE.W    #$7000,D0        \ $7000 - MOVEQ.L #0,D0
  1760.     MOVE.L    D0,-(A6)
  1761.     JSR        compile.opcode    \ $-464(PC) $5652A4
  1762.     MOVE.W    #$2F00,D0        \ $2F00 - MOVE.L D0,-(A7)
  1763.     MOVE.L    D0,-(A6)
  1764.     JSR        compile.opcode
  1765.  
  1766. @b
  1767.     UNLK    A2
  1768.     RTS
  1769. END-CODE
  1770.  
  1771. CODE compile.theTrap        \ $00565668
  1772.     \         _Debugger
  1773.     LINK    A2,#$-1C
  1774.     MOVE.L    (A6)+,$-14(A2)    \ byte4
  1775.     MOVE.L    (A6)+,$-10(A2)    \ byte56
  1776.     MOVE.L    (A6)+,$-C(A2)    \ trap#
  1777.     MOVE.L    (A6)+,$-8(A2)    \ selector
  1778.     MOVE.L    (A6)+,$-4(A2)    \ high nybble of trap#
  1779.  
  1780.     MOVE.L    $-4(A2),D2        \ get high nybble of trap#
  1781.     MOVEQ.L    #$10,D1            \ is the special trap flag set
  1782.     AND.W    D1,D2
  1783.     BEQ.S    @i                \ branch if not set
  1784.  
  1785.     \ it is a special trap
  1786.     MOVE.L    $-14(A2),-(A6)
  1787.     MOVE.L    $-10(A2),-(A6)
  1788.     MOVE.L    $-C(A2),-(A6)
  1789.     MOVE.L    $-8(A2),-(A6)
  1790.     MOVE.L    $-4(A2),-(A6)
  1791.     JSR        special.trap
  1792.     UNLK    A2
  1793.     RTS
  1794.  
  1795. @i
  1796.     MOVE.L    $-10(A2),D1        \ get byte56
  1797.     MOVE.L    #$8000,D0        \ is it a ToolBox call
  1798.     AND.W    D0,D1
  1799.     BNE.S    @a                \ +$90 $56571E
  1800.  
  1801.     \ bit 15 is clear, it is an OSTrap call
  1802.     MOVE.L    $-4(A2),D1        \ get high nybble of trap#
  1803.     MOVE.W    #$80,D2
  1804.     AND.B    D2,D1            \ is bit 15 set, indicating a selector word
  1805.     BEQ.S    @b                \ branch if selector bit is clear
  1806.  
  1807.     MOVE.L    $-8(A2),-(A6)    \ selector
  1808.     MOVE.L    $-4(A2),-(A6)    \ bit14 of trap#
  1809.     JSR        compile.selector
  1810.  
  1811. @b                            \ $0056570A
  1812.     MOVE.L    $-C(A2),-(A6)    \ trap#
  1813.     MOVE.L    $-10(A2),-(A6)    \ byte56
  1814.     MOVE.L    $-14(A2),-(A6)    \ byte4
  1815.     JSR        build.OSTrap    \ $-436(PC) $5652E2
  1816.     UNLK    A2
  1817.     RTS
  1818.  
  1819. @a                            \ $0056571E
  1820.     \ the CALL is a ToolBox routine
  1821.     MOVE.L    $-14(A2),-(A6)    \ byte4
  1822.     MOVE.L    $-10(A2),-(A6)    \ byte56
  1823.     JSR        Build.ToolTrap    \ $-238(PC) $5654F0
  1824.  
  1825.     MOVE.L    $-4(A2),D0        \ get high nybble of trap#
  1826.     MOVE.W    #$80,D1            \ is bit 15 set indicating routine selector
  1827.     AND.B    D1,D0
  1828.     BEQ.S    @g                \ branch if clear
  1829.  
  1830.     MOVE.L    $-8(A2),-(A6)    \ selector
  1831.     MOVE.L    $-4(A2),-(A6)    \ bit14 of trap#
  1832.     JSR        compile.selector
  1833.  
  1834. @g                            \ $00565766
  1835.     MOVE.L    $-C(A2),-(A6)    \ trap#
  1836.     JSR        compile.opcode    \ $-4C8(PC) $5652A4
  1837.     MOVE.L    $-14(A2),-(A6)    \ byte4
  1838.     JSR        compile.result    \ $-174(PC) $565600
  1839.     UNLK    A2
  1840.     RTS
  1841. END-CODE
  1842.  
  1843. CODE calc.Trap.code            \ $0056577A
  1844.     LINK    A2,#$-24
  1845.     MOVE.L    (A6)+,$-4(A2)    \ address of trapword string
  1846.     LEA        $-24(A2),A0        \ buffer
  1847.     MOVE.L    A0,-(A6)
  1848.     MOVEQ.L    #$20,D0            \ $20
  1849.     MOVE.L    D0,-(A6)
  1850.     MOVE.L    D0,-(A6)
  1851.     JSR        $46A(A5)        \ FILL with spaces
  1852.     MOVEA.L    $-4(A2),A0        \ address of trapword string
  1853.     MOVEQ.L    #$0,D0
  1854.     MOVE.B    (A0),D0            \ byte count
  1855.     ANDI.B    #$1F,D0
  1856.     MOVE.L    D0,-(A6)
  1857.     MOVEQ.L    #$0,D0            \ $0
  1858.     MOVE.L    D0,-(A6)
  1859.     MOVE.L    D5,(A3)+        \ DO
  1860.     MOVE.L    D6,(A3)+
  1861.     MOVE.L    (A6)+,D6
  1862.     MOVE.L    (A6)+,D5
  1863.     MOVEQ.L    #0,D1
  1864.     MOVEQ.L    #$60,D2            \ $60
  1865.     MOVE.L    #$DF,D0
  1866.     MOVE.L    $-4(A2),A0
  1867.     ADDQ.L    #1,A0
  1868.     LEA        $-24(A2),A1
  1869.  
  1870. @b                            \ $005657B2
  1871.     MOVE.B    (A0,D6.L),D1    \ get letter of name
  1872.     CMP.L    D2,D1
  1873.     BLE.S    @a                \ +$14 $5657E4
  1874.  
  1875.     AND.L    D0,D1
  1876.  
  1877. @a                            \ $005657E4
  1878.     MOVE.B    D1,(A1,D6.L)
  1879.     ADDQ.L    #$1,D6
  1880.     CMP.L    D6,D5
  1881.     BGT.S    @b                \ +$-4A $5657B2
  1882.  
  1883.     MOVE.L    -(A3),D6        \ LOOP
  1884.     MOVE.L    -(A3),D5
  1885.  
  1886.     MOVEQ.L    #0,D2            \ clear D2
  1887.     MOVE.L    $-4(A2),A0        \ get the pointer to the word
  1888.     MOVE.B    (A0),D2            \ get size of word
  1889.     MOVE.L    D2,D0            \ initialize the hash accumulator
  1890.     AND.B    #$1F,D2            \ only do 31 letters
  1891.     LEA        $-24(A2),A0        \ get uppercase word buffer
  1892.     BRA.S    @lptest
  1893.  
  1894. @loop
  1895.     ROL.W    #7,D0
  1896.     MOVE.B    (A0)+,D1
  1897.     EOR.B    D1,D0
  1898.  
  1899. @lptest
  1900.     DBRA    D2,@loop
  1901.     MOVE.L    D0,-(A6)
  1902.     UNLK    A2
  1903.     RTS
  1904. END-CODE
  1905.  
  1906. CODE (ASSEMBLER_TRAP)        \ $0056582C
  1907.     LINK    A2,#$-10
  1908.     MOVE.L    (A6)+,$-8(A2)    \ string address
  1909.     MOVE.L    (A6)+,$-4(A2)
  1910.     MOVE.L    $-8(A2),-(A6)
  1911.     JSR        calc.Trap.code    \ $-C4(PC) $56577A
  1912.     MOVE.L    (A6)+,$-10(A2)    \ store string code
  1913.     MOVE.L    $-8(A2),-(A6)
  1914.     MOVE.L    $-4(A2),-(A6)
  1915.     MOVEA.L    $-8(A2),A0
  1916.     MOVEQ.L    #$0,D0
  1917.     MOVE.B    (A0),D0
  1918.     MOVE.L    D0,-(A6)
  1919.     MOVEQ.L    #$A,D0
  1920.     SUB.L    D0,(A6)
  1921.     TST.L    (A6)+            \ IF
  1922.     BGE.S    @a                \ +$C $565868
  1923.  
  1924.     MOVEQ.L    #$20,D0            \ $20
  1925.     MOVE.L    D0,-(A6)
  1926.     BRA.S    @b                \ +$28 $56588C
  1927.  
  1928. @a                            \ $00565868
  1929.     MOVE.L    $-8(A2),-(A6)
  1930.     MOVEQ.L    #$A,D0
  1931.     ADD.L    D0,(A6)
  1932.     MOVEA.L    (A6)+,A0
  1933.     MOVEQ.L    #$0,D0
  1934.     MOVE.B    (A0),D0
  1935.     MOVE.L    D0,-(A6)
  1936.     MOVE.L    (A6),-(A6)        \ DUP
  1937.     MOVEQ.L    #$60,D0            \ $60
  1938.     MOVE.L    D0,-(A6)
  1939.     CMPM.L    (A6)+,(A6)+
  1940.     BLE.S    @b                \ +$C $56588C
  1941.  
  1942.     MOVE.L    #$DF,D0
  1943.     AND.L    D0,(A6)
  1944.  
  1945. @b                            \ $0056588C
  1946.     MOVE.L    $-10(A2),-(A6)
  1947.     JSR        get.Trap.entry    \ $-79C(PC) $5650F6 ( -- trap# byte56 byte4 byte7.L hi.nybble )
  1948.     ADDQ.L    #$8,A6            \ 2DROP ( -- trap# byte56 byte4 )
  1949.     UNLK    A2
  1950.     RTS
  1951. END-CODE
  1952.  
  1953. CODE get.Trap.info            \ $0056589A
  1954.     LINK    A2,#$-8
  1955.     MOVEQ.L    #$20,D0            \ $20
  1956.     MOVE.L    D0,-(A6)
  1957.     JSR        $6CA(A5)        \ WORD ( -- addr )
  1958.     MOVE.L    (A6)+,$-4(A2)    \ word.addr
  1959.     MOVE.L    $-4(A2),-(A6)    \ push word.addr
  1960.     JSR        calc.Trap.code    \ $-136(PC) $56577A ( -- code )
  1961.     MOVE.L    (A6)+,$-8(A2)    \ save in lvar
  1962.     MOVE.L    $-4(A2),A0        \ get word string
  1963.     MOVE.L    A0,-(A6)        \ get word string
  1964.     MOVEQ.L    #$0,D0
  1965.     MOVE.B    $1(A0),D0        \ D0 has first letter
  1966.     MOVE.L    D0,-(A6)        \ push on stack ( -- @str 1ltr )
  1967.     MOVEQ.L    #$60,D1            \ $60
  1968.     CMP.L    D1,D0            \ ( @str 1ltr -- @str 1ltr )
  1969.     BLE.S    @a                \ +$C $5658DC
  1970.  
  1971.     \ first char is > $60
  1972.     MOVE.W    #$DF,D0
  1973.     AND.L    D0,(A6)            \ make first letter uppercase ( -- @str 1ltr )
  1974.  
  1975. @a                            \ $005658DC
  1976.     MOVEA.L    $-4(A2),A0        \ get word string
  1977.     MOVEQ.L    #$0,D0
  1978.     MOVE.B    (A0),D0            \ get count byte
  1979.     MOVEQ.L    #$A,D1
  1980.     SUB.L    D1,D0
  1981.     TST.L    D0                \ IF
  1982.     BGE.S    @b                \ +$C $5658F8 - branch if length >= 10
  1983.  
  1984.     MOVEQ.L    #$20,D0            \ $20
  1985.     MOVE.L    D0,-(A6)
  1986.     BRA.S    @c                \ +$28 $56591C
  1987.  
  1988.     \ ( -- @str 1ltr ) 
  1989. @b                            \ $005658F8
  1990.     MOVE.L    $-4(A2),A0        \ ( -- @str 1ltr @str )
  1991.     MOVEQ.L    #$0,D0
  1992.     MOVE.B    $A(A0),D0        \ get 10th ltr
  1993.     MOVE.L    D0,-(A6)
  1994.     MOVEQ.L    #$60,D1            \ $60
  1995.     CMP.L    D1,D0            \ is it greater than $60
  1996.     BLE.S    @c                \ +$C $56591C - branch if uppercase
  1997.  
  1998.     MOVE.L    #$DF,D0            \ make uppercase
  1999.     AND.L    D0,(A6)
  2000.  
  2001. @c                            \ $0056591C
  2002.     MOVE.L    $-8(A2),-(A6)    \ ( -- @str 1ltr 10ltr hash.code )
  2003.     JSR        get.Trap.entry    \ $-82C(PC) $5650F6
  2004.     UNLK    A2                \ ( -- trap# byte56 byte4 byte7.L hi.nybble )
  2005.     RTS
  2006. END-CODE
  2007.  
  2008. CODE print.Trap.info        \ $00565928
  2009.     LINK    A2,#$-4
  2010.     MOVE.L    (A6)+,$-4(A2)    \ low nybble of byte4
  2011.     BEQ.S    @a                \ +$36 $56596C - exit
  2012.  
  2013.     MOVE.L    $-4(A2),-(A6)
  2014.     MOVEQ.L    #$0,D0            \ $0
  2015.     MOVE.L    D0,-(A6)
  2016.     MOVE.L    D5,(A3)+        \ DO
  2017.     MOVE.L    D6,(A3)+
  2018.     MOVE.L    (A6)+,D6
  2019.     MOVE.L    (A6)+,D5
  2020.  
  2021. @b                            \ $0056594A
  2022.     MOVEQ.L    #$6E,D0            \ $6E 'n'
  2023.     MOVE.L    D0,-(A6)
  2024.     JSR        $28A(A5)        \ EMIT
  2025.     MOVEQ.L    #$31,D0
  2026.     ADD.L    D6,D0
  2027.     MOVE.L    D0,-(A6)        \ I
  2028.     JSR        $28A(A5)        \ EMIT
  2029.     JSR        $3DA(A5)        \ SPACE
  2030.     ADDQ.L    #$1,D6
  2031.     CMP.L    D6,D5
  2032.     BGT.S    @b                \ +$-1A $56594A
  2033.  
  2034.     MOVE.L    -(A3),D6
  2035.     MOVE.L    -(A3),D5
  2036.  
  2037. @a                            \ $0056596C
  2038.     UNLK    A2
  2039.     RTS
  2040. END-CODE
  2041.  
  2042. CODE (TRAP#)                \ $00565970
  2043.     LINK    A2,#$-C
  2044.     LEA        $24(A4),A0        \ Ref: BASE
  2045.     MOVE.L    (A0),$-C(A2)    \ save BASE
  2046.     JSR        $502(A5)        \ HEX
  2047.     JSR        get.Trap.info    \ $-E8(PC) ( -- trap# byte56 byte4 selector trap.flags )
  2048.     ADDQ.L    #$8,A6            \ 2DROP
  2049.     MOVE.L    (A6)+,$-8(A2)    \ byte4
  2050.     ADDQ.L    #$4,A6            \ DROP
  2051.     MOVE.L    (A6)+,$-4(A2)    \ trap#
  2052.     MOVEQ.L    #$24,D0            \ $24
  2053.     MOVE.L    D0,-(A6)
  2054.     JSR        $28A(A5)        \ EMIT
  2055.     MOVE.L    $-4(A2),-(A6)    \ trap#
  2056.     JSR        $10A(A5)        \ <#
  2057.     JSR        $592(A5)        \ #S
  2058.     JSR        $57A(A5)        \ #>
  2059.     JSR        $15A(A5)        \ TYPE
  2060.     BSR.S    @a                \ +$8
  2061.  
  2062.     DC.B    $4
  2063.     DC.B    '  ( '
  2064. .ALIGN
  2065.  
  2066. @a                            \ $005659B6
  2067.     MOVE.L    (A7)+,-(A6)
  2068.     JSR        $EA(A5)            \ <$5D3BCE> $538CE8
  2069.     MOVE.L    $-8(A2),-(A6)    \ byte4
  2070.     MOVEQ.L    #$F,D0
  2071.     AND.L    D0,(A6)            \ get low nybble
  2072.     JSR        print.Trap.info    \ $-9E(PC) $565928 write out input values
  2073.  
  2074.     BSR.S    @b                \ +$6
  2075.     DC.B    $3
  2076.     DC.B    '-- '
  2077. .ALIGN
  2078.  
  2079. @b                            \ $005659CE
  2080.     MOVE.L    (A7)+,-(A6)
  2081.     JSR        $EA(A5)            \
  2082.     MOVE.L    $-8(A2),-(A6)    \ byte4
  2083.     MOVEQ.L    #$10,D0            \ $10
  2084.     MOVE.L    D0,-(A6)
  2085.     JSR        $AA(A5)            \ / - shift right 4 bits
  2086.     MOVE.L    (A6)+,$-8(A2)    \ push in byte4
  2087.     MOVE.L    $-8(A2),-(A6)
  2088.     MOVEQ.L    #$4,D0
  2089.     CMP.L    (A6),D0            \ is it 4
  2090.     BNE.S    @c                \ +$10 $5659FC
  2091.  
  2092.     ADDQ.L    #$4,A6            \ DROP
  2093.     MOVEQ.L    #$1,D0
  2094.     MOVE.L    D0,$-8(A2)        \ set it to be 1
  2095.     BRA.S    @d                \ +$1A $565A12
  2096.  
  2097. @c                            \ $005659FC
  2098.     MOVEQ.L    #$8,D0
  2099.     CMP.L    (A6),D0            \ is it 8
  2100.     BNE.S    @e                \ +$10 $565A10
  2101.  
  2102.     ADDQ.L    #$4,A6            \ DROP
  2103.     MOVEQ.L    #$1,D0            \ set it to be 1
  2104.     MOVE.L    D0,$-8(A2)
  2105.     BRA.S    @d                \ +$6 $565A12
  2106.  
  2107. @e                            \ $00565A10
  2108.     ADDQ.L    #$4,A6            \ DROP
  2109.  
  2110. @d                            \ $00565A12
  2111.     MOVE.L    $-8(A2),-(A6)
  2112.     JSR        print.Trap.info    \ $-F0(PC) $565928 - output the return values
  2113.     BSR.S    @f                \ +$4
  2114.     DC.B    $1
  2115.     DC.B    ')'
  2116. .ALIGN
  2117.  
  2118. @f                            \ $00565A1E
  2119.     MOVE.L    (A7)+,-(A6)
  2120.     JSR        $EA(A5)            \ type the string
  2121.     JSR        $3C2(A5)        \ CR
  2122.     MOVE.L    $-C(A2),D0
  2123.     LEA        $24(A4),A0        \ Ref: BASE
  2124.     MOVE.L    D0,(A0)
  2125.     UNLK    A2
  2126.     RTS
  2127. END-CODE
  2128.  
  2129. CODE compile.EXGL2            \ $00565A44
  2130.     MOVE.W    #$C98F,D0        \ $C98F - EXG.L D4,A7
  2131.     MOVE.L    D0,-(A6)
  2132.     JSR        compile.opcode    \ $-7AA(PC) $5652A4
  2133.     RTS
  2134. END-CODE
  2135.  
  2136. CODE GV$150                    \ $00565A52
  2137.     LEA        $-148(A5),A0
  2138.     MOVE.L    $-8(A0),-(A6)
  2139.     RTS
  2140. END-CODE
  2141.  
  2142. \ CALL comes here
  2143. CODE do.CALL                \ $00565A62
  2144.     LINK    A2,#$-14
  2145.     JSR        get.Trap.info    \ ( -- trap# byte56 byte4 selector trap.flags )
  2146.     MOVE.L    (A6)+,$-14(A2)
  2147.     MOVE.L    (A6)+,$-10(A2)
  2148.     MOVE.L    (A6)+,$-4(A2)
  2149.     MOVE.L    (A6)+,$-8(A2)
  2150.     MOVE.L    (A6)+,$-C(A2)
  2151.     TST.L    $-58E(A5)        \ STATE IF
  2152.     BEQ.S    @a                \ +$66 $565AEC
  2153.  
  2154.     BSR.S    GV$150            \ $-3A(PC) $565A52
  2155.     JSR        $B02(A5)        \ HERE
  2156.     CMPM.L    (A6)+,(A6)+
  2157.     BNE.S    @b                \ +$C $565AA0
  2158.  
  2159.     BSR.S    compile.EXGL2    \ $-56(PC) $565A44
  2160.     BRA.S    @c                \ +$30 $565ACC
  2161.  
  2162. @b                            \ $00565AA0
  2163.     JSR        $B02(A5)        \ HERE
  2164.     MOVEA.L    (A6)+,A0
  2165.     MOVEQ.L    #$0,D0
  2166.     MOVE.W    $-2(A0),D0
  2167.     MOVE.W    #$C98F,D1        \ $C98F
  2168.     CMP.W    D0,D1
  2169.     BEQ.S    @d                \ +$C $565AC4
  2170.  
  2171.     BSR.S    compile.EXGL2    \ $-7A(PC) $565A44
  2172.     BRA.S    @c                \ +$C $565ACC
  2173.  
  2174. @d                            \ $00565AC4
  2175.     MOVEQ.L    #$-2,D0            \ $-2
  2176.     MOVE.L    D0,-(A6)
  2177.     JSR        $EF2(A5)        \ ALLOT
  2178.  
  2179. @c                            \ $00565ACC
  2180.     MOVE.L    $-14(A2),-(A6)
  2181.     MOVE.L    $-10(A2),-(A6)
  2182.     MOVE.L    $-C(A2),-(A6)
  2183.     MOVE.L    $-8(A2),-(A6)
  2184.     MOVE.L    $-4(A2),-(A6)
  2185.     JSR        compile.theTrap    \ $-47A(PC) $565668
  2186.     JSR        compile.EXGL2    \ $-A2(PC) $565A44
  2187.     BRA.S    @e                \ +$4E $565B36
  2188.  
  2189. @a                            \ $00565AEC
  2190.     LEA        $13C(A4),A0        \ Ref: PAD
  2191.     MOVEQ.L    #$20,D0
  2192.     ADD.L    D0,A0
  2193.     LEA        $-B5E(A5),A1
  2194.     MOVE.L    A0,(A1)
  2195.     JSR        compile.EXGL2    \ $-BA(PC) $565A44
  2196.     MOVE.L    $-14(A2),-(A6)
  2197.     MOVE.L    $-10(A2),-(A6)
  2198.     MOVE.L    $-C(A2),-(A6)
  2199.     MOVE.L    $-8(A2),-(A6)
  2200.     MOVE.L    $-4(A2),-(A6)
  2201.     JSR        compile.theTrap    \ $-4AE(PC) $565668
  2202.     JSR        compile.EXGL2    \ $-D6(PC) $565A44
  2203.     MOVE.W    #$4E75,D0        \ $4E75
  2204.     MOVE.L    D0,-(A6)
  2205.     JSR        compile.opcode    \ $-882(PC) $5652A4
  2206.     LEA        $13C(A4),A0        \ Ref: PAD
  2207.     MOVEQ.L    #$20,D0
  2208.     ADD.L    D0,A0
  2209.     JSR        (A0)            \ EXECUTE
  2210.  
  2211. @e                            \ $00565B36
  2212.     UNLK    A2
  2213.     RTS
  2214. END-CODE
  2215.  
  2216. \ (CALL) comes here
  2217. CODE do.(CALL)                \ $00565B3A
  2218.     LINK    A2,#$-18
  2219.     JSR        get.Trap.info    \ ( -- trap# byte56 byte4 selector trap.flags )
  2220.     MOVE.L    (A6)+,$-18(A2)    \ bit14
  2221.     MOVE.L    (A6)+,$-14(A2)    \ byte7.L
  2222.     MOVE.L    (A6)+,$-8(A2)    \ byte4
  2223.     MOVE.L    (A6)+,$-C(A2)    \ byte56
  2224.     MOVE.L    (A6)+,$-10(A2)    \ trap#
  2225.     TST.L    $-58E(A5)        \ STATE IF
  2226.     BEQ.S    @a                \ +$20 $565B7E
  2227.  
  2228.     MOVE.L    $-18(A2),-(A6)
  2229.     MOVE.L    $-14(A2),-(A6)
  2230.     MOVE.L    $-10(A2),-(A6)
  2231.     MOVE.L    $-C(A2),-(A6)
  2232.     MOVE.L    $-8(A2),-(A6)
  2233.     JSR        compile.theTrap    \ $-510(PC) $565668
  2234.     BRA.S    @b                \ +$46 $565BC0
  2235.  
  2236. @a                            \ $00565B7E
  2237.     LEA        $13C(A4),A0        \ Ref: PAD
  2238.     MOVEQ.L    #$20,D0
  2239.     ADD.L    D0,A0
  2240.     LEA        $-B5E(A5),A1
  2241.     MOVE.L    A0,(A1)
  2242.     MOVE.L    $-18(A2),-(A6)
  2243.     MOVE.L    $-14(A2),-(A6)
  2244.     MOVE.L    $-10(A2),-(A6)
  2245.     MOVE.L    $-C(A2),-(A6)
  2246.     MOVE.L    $-8(A2),-(A6)
  2247.     JSR        compile.theTrap    \ $-53C(PC) $565668
  2248.     MOVE.W    #$4E75,D0        \ $4E75
  2249.     MOVE.L    D0,-(A6)
  2250.     JSR        compile.opcode    \ $-90C(PC) $5652A4
  2251.     LEA        $13C(A4),A0        \ Ref: PAD
  2252.     MOVEQ.L    #$20,D0
  2253.     ADD.L    D0,A0
  2254.     JSR        (A0)            \ EXECUTE
  2255.  
  2256. @b                            \ $00565BC0
  2257.     UNLK    A2
  2258.     RTS
  2259. END-CODE
  2260.  
  2261. CODE (TRAPNAME)                \ $00565BC4
  2262.     LINK    A2,#$-10
  2263.     MOVE.L    (A6)+,$-4(A2)
  2264.     JSR        load.TEXT2        \ $-B6E(PC) $565060
  2265.     TST.L    (A6)+            \ IF
  2266.     BNE.S    @a                \ +$1A $565BEC
  2267.  
  2268.     MOVEQ.L    #$1,D0            \ $1
  2269.     EXG        D4,A7
  2270.     MOVE.W    D0,-(A7)
  2271.             _SysBeep        \ Trap #$A9C8
  2272.     EXG        D4,A7
  2273.     UNLK    A2
  2274.     RTS
  2275.  
  2276. @a                            \ $00565BEC
  2277.     MOVE.L    $-4(A2),D1        \ get trap#
  2278.     MOVE.L    #$400,D0
  2279.     AND.L    D0,D1            \ is ASYNC bit 10 set
  2280.     MOVE.L    D1,$-8(A2)        \ store bit 10 of trap word
  2281.     MOVE.W    #$BFF,D0        \ $BFF - get
  2282.     MOVE.L    $-4(A2),D1
  2283.     AND.L    D0,D1            \ store trap# as 0000 x0xx xxxx xxxx
  2284.     MOVE.L    D1,$-4(A2)        \ store in lvar
  2285.     LEA        $-B62(A5),A0    \ pointer to TEXT2
  2286.     MOVE.L    (A0),$-10(A2)    \ store TEXT2 ptr in lvar
  2287.  
  2288. @e                            \ $00565C16
  2289.     MOVE.L    $-10(A2),A0        \ TEXT2
  2290.     MOVEQ.L    #$0,D0
  2291.     MOVE.B    $A(A0),D0        \ get high byte of trap word
  2292.     MOVE.L    D0,-(A6)
  2293.     MOVE.L    #$F,D0            \ clear out high byte
  2294.     AND.L    D0,(A6)
  2295.     MOVE.L    #$100,D0        \ $100
  2296.     MOVE.L    D0,-(A6)
  2297.     JSR        $B2(A5)            \ * - shift into upper byte
  2298.     MOVE.L    $-10(A2),A0        \ get TEXT2 ptr
  2299.     MOVEQ.L    #$0,D0
  2300.     MOVE.B    $B(A0),D0
  2301.     ADD.L    D0,(A6)            \ ( -- trapword )
  2302.     MOVE.L    $-4(A2),-(A6)
  2303.     MOVEQ.L    #$0,D0
  2304.     CMPM.L    (A6)+,(A6)+        \ compare with passed in value
  2305.     BEQ.S    @b                \ +$4 $565C58 - set false if trapnumber matches
  2306.  
  2307.     MOVEQ.L    #$-1,D0            \ $-1 - set true if doesn't compare
  2308.  
  2309. @b                            \ $00565C58
  2310.     MOVE.L    D0,-(A6)
  2311.     MOVEA.L    $-10(A2),A0        \ TEXT2 ptr
  2312.     MOVE.L    (A0),D1
  2313.     MOVE.L    #$25252525,D2    \ $25252525
  2314.     MOVEQ.L    #$0,D0
  2315.     CMP.L    D1,D2            \ is it the end
  2316.     BEQ.S    @c                \ +$4 $565C70 set false if it is the end
  2317.  
  2318.     MOVEQ.L    #$-1,D0            \ set true if it is not the end
  2319.  
  2320. @c                            \ $00565C70
  2321.     AND.L    (A6)+,D0
  2322.     BEQ.S    @d                \ +$E $565C82 - branch forward if the end or match
  2323.  
  2324.     \ go back if no match and doesn't compare
  2325.     MOVEQ.L    #$1A,D0            \ add the offset 26
  2326.     ADD.L    D0,$-10(A2)        \ to the TEXT2 ptr
  2327.     BRA.S    @e                \ +$-68 $565C16
  2328.  
  2329. @d                            \ $00565C82
  2330.     \ check for the end
  2331.     MOVEA.L    $-10(A2),A0
  2332.     MOVE.L    (A0),D1
  2333.     MOVE.L    #$25252525,D2    \ $25252525
  2334.     CMP.L    D1,D2
  2335.     BEQ.S    @f                \ +$4A $565CDC - we reached the end
  2336.  
  2337.     \ we found the word
  2338.     MOVE.L    $-10(A2),A0        \ get TEXT2 ptr
  2339.     MOVEQ.L    #$0,D0
  2340.     MOVE.B    $2(A0),D0
  2341.     MOVE.L    D0,-(A6)        \ push letter
  2342.     JSR        $28A(A5)        \ EMIT
  2343.     MOVE.L    $-10(A2),-(A6)    \ get TEXT2 ptr
  2344.     MOVEQ.L    #$D,D0            \ offset to rest of trapname
  2345.     ADD.L    D0,(A6)
  2346.     MOVEQ.L    #$D,D0            \ $D - count of 13
  2347.     MOVE.L    D0,-(A6)
  2348.     JSR        $252(A5)        \ -TRAILING
  2349.     JSR        $15A(A5)        \ TYPE
  2350.     TST.L    $-8(A2)            \ get bit 10 IF
  2351.     BEQ.S    @g                \ +$14 $565CD8
  2352.  
  2353.     BSR.S    @h                \ +$A
  2354.     DC.B    $6
  2355.     DC.B    ',ASYNC'
  2356. .ALIGN
  2357.  
  2358. @h                            \ $00565CD2
  2359.     MOVE.L    (A7)+,-(A6)
  2360.     JSR        $EA(A5)            \
  2361.  
  2362. @g                            \ $00565CD8
  2363.     BRA.S    @j                \ +$18 $565CF0
  2364.  
  2365. @f                            \ $00565CDC
  2366.     BSR.S    @i                \ +$E
  2367.     DC.B    $B
  2368.     DC.B    'UnknownTrap'
  2369. .ALIGN
  2370.  
  2371. @i                            \ $00565CEA
  2372.     MOVE.L    (A7)+,-(A6)
  2373.     JSR        $EA(A5)            \
  2374.  
  2375. @j                            \ 00565CF0
  2376.     UNLK    A2
  2377.     RTS
  2378. END-CODE
  2379.  
  2380. CODE (DsTrapName)            \ $00565CF4
  2381.     LINK    A2,#$-14
  2382.     MOVE.L    (A6)+,$-8(A2)    \ buffer to write into
  2383.     MOVE.L    (A6)+,$-4(A2)    \ trapnumber
  2384.     MOVEQ.L    #$0,D0
  2385.     MOVE.L    D0,$-14(A2)
  2386.     JSR        load.TEXT2        \ $-CA8(PC) $565060
  2387.     TST.L    (A6)+            \ IF
  2388.     BEQ        @a                \ +$13C $565E48
  2389.  
  2390.     MOVE.L    $-4(A2),-(A6)    \ get trapnumber
  2391.     MOVE.L    #$400,D0
  2392.     AND.L    D0,(A6)
  2393.     MOVE.L    (A6)+,$-C(A2)    \ get ASYNC bit 10 setting
  2394.     MOVE.L    #$BFF,D0        \ $BFF
  2395.     MOVE.L    D0,-(A6)
  2396.     MOVE.L    $-4(A2),D0
  2397.     AND.L    D0,(A6)
  2398.     MOVE.L    (A6)+,$-4(A2)
  2399.     MOVE.L    $-B62(A5),$-10(A2)    \ pointer to TEXT2
  2400.  
  2401. @e                            \ $00565D3A
  2402.     MOVE.L    $-10(A2),A0        \ pointer to TEXT2
  2403.     MOVEQ.L    #$0,D0
  2404.     MOVE.B    $A(A0),D0        \ get high byte of trap word
  2405.     MOVE.L    D0,-(A6)
  2406.     MOVE.L    #$F,D0
  2407.     AND.L    D0,(A6)            \ mask out high byte
  2408.     MOVE.L    #$100,D0        \ $100 - shift left 8 bits
  2409.     MOVE.L    D0,-(A6)
  2410.     JSR        $B2(A5)            \ *
  2411.     MOVE.L    $-10(A2),A0        \ TEXT2
  2412.     MOVEQ.L    #$0,D0
  2413.     MOVE.B    $B(A0),D0        \ get low byte of trapword
  2414.     ADD.L    D0,(A6)            \ add to high byte
  2415.     MOVE.L    $-4(A2),-(A6)
  2416.     MOVEQ.L    #$0,D0
  2417.     CMPM.L    (A6)+,(A6)+        \ is it the same
  2418.     BEQ.S    @b                \ +$4 $565D7C
  2419.  
  2420.     MOVEQ.L    #$-1,D0            \ $-1
  2421.  
  2422. @b                            \ $00565D7C
  2423.     MOVE.L    D0,-(A6)
  2424.     MOVEA.L    $-10(A2),A0
  2425.     MOVE.L    (A0),D1
  2426.     MOVE.L    #$25252525,D2    \ $25252525
  2427.     MOVEQ.L    #$0,D0
  2428.     CMP.L    D1,D2
  2429.     BEQ.S    @c                \ +$4 $565D94
  2430.  
  2431.     MOVEQ.L    #$-1,D0
  2432.  
  2433. @c                            \ $00565D94
  2434.     AND.L    (A6)+,D0
  2435.     TST.L    D0                \ IF
  2436.     BEQ.S    @d                \ +$E $565DA6
  2437.  
  2438.     MOVEQ.L    #$1A,D0
  2439.     ADD.L    D0,$-10(A2)
  2440.     BRA.S    @e                \ +$-68 $565D3A
  2441.  
  2442. @d                            \ $00565DA6
  2443.     MOVEA.L    $-10(A2),A0
  2444.     MOVE.L    (A0),D1
  2445.     MOVE.L    #$25252525,D2    \ $25252525
  2446.     CMP.L    D1,D2
  2447.     BEQ        @a                \ +$92 $565E48 - reached the end
  2448.  
  2449.     MOVEQ.L    #$5F,D0            \ $5F - underscore
  2450.     MOVE.L    D0,-(A6)
  2451.     MOVEA.L    $-8(A2),A0        \ get buffer
  2452.     MOVE.L    (A6)+,D0
  2453.     MOVE.B    D0,(A0)            \ write _ into buffer
  2454.     MOVEQ.L    #$1,D0
  2455.     MOVE.L    D0,$-14(A2)        \ set byte count
  2456.     MOVE.L    $-10(A2),-(A6)    \ TEXT2
  2457.     MOVEQ.L    #$2,D0            \ first letter offset
  2458.     ADD.L    D0,(A6)
  2459.     MOVEA.L    (A6)+,A0
  2460.     MOVEQ.L    #$0,D0
  2461.     MOVE.B    (A0),D0            \ get first letter
  2462.     MOVE.L    D0,-(A6)
  2463.     MOVE.L    $-8(A2),-(A6)
  2464.     ADDQ.L    #$1,(A6)        \ 1+
  2465.     MOVEA.L    (A6)+,A0        \ C!
  2466.     MOVE.L    (A6)+,D0
  2467.     MOVE.B    D0,(A0)
  2468.     MOVEQ.L    #$1,D0
  2469.     ADD.L    D0,$-14(A2)
  2470.     MOVE.L    $-10(A2),-(A6)    \ get TEXT2 ptr
  2471.     MOVEQ.L    #$D,D0            \ rest of trapname offset
  2472.     ADD.L    D0,(A6)
  2473.     MOVEQ.L    #$D,D0            \ $C
  2474.     MOVE.L    D0,-(A6)
  2475.     JSR        $252(A5)        \ -TRAILING
  2476.     MOVE.L    (A6),-(A6)        \ DUP
  2477.     MOVE.L    (A6)+,D0
  2478.     ADD.L    D0,$-14(A2)
  2479.     MOVE.L    $-8(A2),-(A6)
  2480.     ADDQ.L    #$2,(A6)        \ 2+
  2481.     MOVE.L    (A6)+,D0
  2482.     MOVE.L    (A6)+,D1
  2483.     MOVE.L    D0,-(A6)
  2484.     MOVE.L    D1,-(A6)
  2485.     JSR        $DA(A5)            \ CMOVE - copy trapname to buffer
  2486.     MOVE.L    $-C(A2),-(A6)    \ test for ASYNC bit
  2487.     TST.L    (A6)+            \ IF
  2488.     BEQ.S    @a                \ +$2A $565E48
  2489.  
  2490.     BSR.S    @f                \ +$A
  2491.     DC.B    $6
  2492.     DC.B    ',ASYNC'
  2493. .ALIGN
  2494.  
  2495. @f                            \ $00565E2C
  2496.     MOVE.L    (A7)+,-(A6)
  2497.     ADDQ.L    #$1,(A6)        \ 1+
  2498.     MOVE.L    $-8(A2),-(A6)
  2499.     MOVE.L    $-14(A2),D0
  2500.     ADD.L    D0,(A6)
  2501.     MOVEQ.L    #$6,D0            \ $6
  2502.     MOVE.L    D0,-(A6)
  2503.     JSR        $DA(A5)            \ CMOVE - copy ASYNC 
  2504.     MOVEQ.L    #$6,D0
  2505.     ADD.L    D0,$-14(A2)
  2506.  
  2507. @a                            \ $00565E48
  2508.     MOVE.L    $-14(A2),-(A6)
  2509.     UNLK    A2
  2510.     RTS
  2511. END-CODE
  2512.  
  2513. CODE (TRAPLIST)                \ $00565E50
  2514.     LINK    A2,#$-8
  2515.     JSR        load.TEXT2        \ $-DF6(PC) $565060
  2516.     TST.L    (A6)+            \ IF
  2517.     BNE.S    @a                \ +$1A $565E74
  2518.  
  2519.     MOVEQ.L    #$1,D0            \ $1
  2520.     EXG        D4,A7
  2521.     MOVE.W    D0,-(A7)
  2522.             _SysBeep        \ Trap #$A9C8
  2523.     EXG        D4,A7
  2524.     UNLK    A2
  2525.     RTS
  2526.  
  2527. @a                            \ 
  2528.     JSR        $3C2(A5)        \ CR
  2529.     LEA        $-B62(A5),A0    \ TEXT2
  2530.     MOVE.L    (A0),$-4(A2)
  2531.     MOVEQ.L    #$0,D0
  2532.     MOVE.L    D0,$-8(A2)
  2533.     MOVEQ.L    #$1,D0            \ $1
  2534.     MOVE.L    D0,-(A6)
  2535.     MOVEQ.L    #$0,D0            \ $0
  2536.     MOVE.L    D0,-(A6)
  2537.     MOVE.L    D5,(A3)+        \ DO
  2538.     MOVE.L    D6,(A3)+
  2539.     MOVE.L    (A6)+,D6
  2540.     MOVE.L    (A6)+,D5
  2541.  
  2542. @f                            \ $00565E96
  2543.     MOVE.L    $-4(A2),A0        \ TEXT2
  2544.     MOVE.L    $-8(A2),D0        \ offset
  2545.     ADD.L    D0,A0            \ @record
  2546.     MOVEQ.L    #$0,D0
  2547.     MOVE.B    2(A0),D0        \ get 1st ltr
  2548.     MOVE.L    D0,-(A6)
  2549.     JSR        $28A(A5)        \ EMIT
  2550.     MOVE.L    $-4(A2),A0        \ TEXT2
  2551.     MOVE.L    $-8(A2),D0        \ offset
  2552.     ADD.L    D0,A0            \ @record
  2553.     MOVEQ.L    #$D,D0            \ offset to rest of trapname
  2554.     ADD.L    D0,A0
  2555.     MOVE.L    A0,-(A6)
  2556.     MOVEQ.L    #$D,D0            \ $D count of bytes to type out
  2557.     MOVE.L    D0,-(A6)
  2558.     JSR        $15A(A5)        \ TYPE
  2559.     JSR        Word3            \ $-1228(PC) $564CA0
  2560.     JSR        $272(A5)        \ ?TERMINAL
  2561.     TST.L    (A6)+            \ IF
  2562.     BEQ.S    @b                \ +$42 $565F12
  2563.  
  2564.     JSR        $3C2(A5)        \ CR
  2565.     JSR        $1D2(A5)        \ KEY
  2566.     ADDQ.L    #$4,A6            \ DROP
  2567.  
  2568.     BSR.S    @c                \ +$18
  2569.     DC.B    $15
  2570.     DC.B    'Space bar to continue'
  2571. .ALIGN
  2572.  
  2573. @c                            \ $00565EF6
  2574.     MOVE.L    (A7)+,-(A6)
  2575.     JSR        $EA(A5)            \ type it out
  2576.     JSR        $3C2(A5)        \ CR
  2577.     JSR        $1D2(A5)        \ KEY
  2578.     MOVEQ.L    #$20,D0            \ $20
  2579.     MOVE.L    D0,-(A6)
  2580.     CMPM.L    (A6)+,(A6)+
  2581.     BEQ.S    @b                \ +$8 $565F12
  2582.  
  2583.     BRA.S    @d                \ +$38 $565F46
  2584.  
  2585. @b                            \ $00565F12
  2586.     MOVEQ.L    #$1A,D0            \ offset to next traprecord
  2587.     ADD.L    D0,$-8(A2)
  2588.     MOVE.L    $-4(A2),A0        \ TEXT2.ptr
  2589.     MOVE.L    $-8(A2),D0
  2590.     ADD.L    D0,A0            \ @record
  2591.     MOVE.L    (A0),D1
  2592.     MOVE.L    #$25252525,D2    \ $25252525
  2593.     MOVEQ.L    #$0,D0
  2594.     CMP.L    D1,D2            \ end of the data
  2595.     BNE.S    @e                \ +$4 $565F36
  2596.  
  2597.     MOVEQ.L    #$-1,D0            \ $-1 true if at the end
  2598.  
  2599. @e                            \ $00565F36
  2600.     TST.L    D0                \ IF
  2601.     BEQ        @f                \ +$-A4 $565E96 - next word
  2602.     ADDQ.L    #$1,D6            \ go again
  2603.     CMP.L    D6,D5
  2604.     BGT        @f                \ +$-AC $565E96
  2605.  
  2606. @d                            \ $00565F46
  2607.     MOVE.L    -(A3),D6
  2608.     MOVE.L    -(A3),D5
  2609.     JSR        $3C2(A5)        \ CR
  2610.     UNLK    A2
  2611.     RTS
  2612. END-CODE
  2613.  
  2614. HEADER new.CODE11.end
  2615.  
  2616. : test.new.code.size
  2617.     ['] new.CODE11.end CALL StripAddress
  2618.     ['] new.CODE11.start CALL StripAddress - DUP
  2619.     5974 >
  2620.     IF
  2621.         CR ." *** WARNING *** - new code is too large to fit in CODE11 segment."
  2622.         5974 - CR ." Too big by " . ."  bytes."
  2623.     ELSE
  2624.         5974 swap - 
  2625.         CR ." New code is " . ." bytes smaller than the old code."
  2626.     THEN
  2627.     ;
  2628.  
  2629. test.new.code.size
  2630.  
  2631.  
  2632.  
  2633. : install.new.Trapstuff
  2634.     { | resRefNum resHandle code.ptr -- }
  2635.     " Mach2 2.14 CODE11.new" CALL OpenResFile -> resRefNum
  2636.     resRefNum 0=
  2637.     IF
  2638.         CR ." Could not open the resource file." ABORT
  2639.     ELSE
  2640.         ASCII CODE 11 CALL GetResource -> resHandle
  2641.         resHandle 0=
  2642.         IF
  2643.             CR ." There must be a CODE 11 resource in the file to modify." ABORT
  2644.         ELSE
  2645.             resHandle CALL HLock DROP
  2646.             resHandle @ CALL StripAddress 4+ -> code.ptr
  2647.             ['] new.CODE11.start
  2648.             code.ptr
  2649.             ['] new.CODE11.end ['] new.CODE11.start - 
  2650.             CMOVE
  2651.             
  2652.             ( install the call for (ASCII) )
  2653.             $5DA6 ['] (ASCII) ['] an.RTS - - NEGATE
  2654.             code.ptr $5DA6 + W!
  2655.  
  2656.             ( install the code for (DUMP) )
  2657.             $5DB2 ['] (DUMP) ['] an.RTS - - NEGATE
  2658.             code.ptr $5DB2 + W!
  2659.  
  2660.             ( install the code for (.S) )
  2661.             $5DAC ['] (.S) ['] an.RTS - - NEGATE
  2662.             code.ptr $5DAC + W!
  2663.  
  2664.             ( install the code for (WORDS) )
  2665.             $5E06 ['] (WORDS) ['] an.RTS - - NEGATE
  2666.             code.ptr $5E06 + W!
  2667.  
  2668.             ( install the codes for word5 )
  2669.             $5BDA ['] word5 ['] an.RTS - - NEGATE
  2670.             code.ptr $5BDA + W!
  2671.             $5CCC ['] word5 ['] an.RTS - - NEGATE
  2672.             code.ptr $5CCC + W!
  2673.  
  2674.             ( install the codes for word6 )
  2675.             $5D6C ['] word6 ['] an.RTS - - NEGATE
  2676.             code.ptr $5D6C + W!
  2677.             $5D8C ['] word6 ['] an.RTS - - NEGATE
  2678.             code.ptr $5D8C + W!
  2679.  
  2680.             ( install the codes for (ASSEMBLER_TRAP) )
  2681.             $5DC4 ['] (ASSEMBLER_TRAP) ['] an.RTS - - NEGATE
  2682.             code.ptr $5DC4 + W!
  2683.  
  2684.             ( install the codes for (TRAP#) )
  2685.             $5D94 ['] (TRAP#) ['] an.RTS - - NEGATE
  2686.             code.ptr $5D94 + W!
  2687.  
  2688.             ( install the codes for do.CALL )
  2689.             $5DCA ['] do.CALL ['] an.RTS - - NEGATE
  2690.             code.ptr $5DCA + W!
  2691.  
  2692.             ( install the codes for do.(CALL) )
  2693.             $5DD0 ['] do.(CALL) ['] an.RTS - - NEGATE
  2694.             code.ptr $5DD0 + W!
  2695.  
  2696.             ( install the codes for (TRAPNAME) )
  2697.             $5DA0 ['] (TRAPNAME) ['] an.RTS - - NEGATE
  2698.             code.ptr $5DA0 + W!
  2699.  
  2700.             ( install the codes for (DsTrapName) )
  2701.             $5E00 ['] (DsTrapName) ['] an.RTS - - NEGATE
  2702.             code.ptr $5E00 + W!
  2703.  
  2704.             ( install the codes for (TRAPLIST) )
  2705.             $5D9A ['] (TRAPLIST) ['] an.RTS - - NEGATE
  2706.             code.ptr $5D9A + W!
  2707.  
  2708.             resHandle CALL ChangedResource
  2709.             resRefNum CALL UpdateResFile
  2710.             resRefNum CALL CloseResFile
  2711.         THEN
  2712.     THEN
  2713.     ;
  2714.  
  2715.